runtime: publish NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"channel": "homelab-runtime",
|
||||
"command_id": "NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102",
|
||||
"status": "FAIL",
|
||||
"rc": 3,
|
||||
"host": "pve01",
|
||||
"mode": "change",
|
||||
"component": "newfi-newfdom-articles205-pack1-two-articles-public-smoke-corrected",
|
||||
"started_at_utc": "2026-09-18T21:08:58Z",
|
||||
"finished_at_utc": "2026-09-18T21:09:02Z",
|
||||
"reference_register_checked": true,
|
||||
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
|
||||
"error_register_checked": true,
|
||||
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
|
||||
"command_sha256": "52df1dc3ff6172b8b5f56dcda9503a23848dadf9b8443bc5d36b9affc45185b4",
|
||||
"duplicate_failed_command_blocked": false,
|
||||
"block_reason": null,
|
||||
"execution_started": true,
|
||||
"change_declared": true,
|
||||
"result_contract_valid": true,
|
||||
"result_contract_status": "FAIL",
|
||||
"result_contract_error": null,
|
||||
"command_rc": 3,
|
||||
"changes_made": false,
|
||||
"rollback_started": false,
|
||||
"rollback_restored": null,
|
||||
"mutation_outcome": "NO_MUTATION",
|
||||
"sanitized": true,
|
||||
"secrets_included": false,
|
||||
"private_addresses_included": false,
|
||||
"raw_evidence_retained_locally": true,
|
||||
"raw_evidence_sha256": "3b326b94cda2adf7220a7666df72b149dced195c3f8243e4edd1318e63484711",
|
||||
"sanitized_output_sha256": "3b326b94cda2adf7220a7666df72b149dced195c3f8243e4edd1318e63484711",
|
||||
"output_truncated_in_json": false,
|
||||
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
|
||||
"output": "NEWFI102_BEGIN\nCOMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102\nNEWFI102_SAFE_REPORT={\"changes_made\": false, \"decision\": \"FAIL_ARTICLES205_PACK1_HOLD\", \"error\": \"RuntimeError:GUEST:RuntimeError:PERR\", \"rollback_restored\": null, \"rollback_started\": false}\nHOMELAB_RESULT_CONTRACT={\"version\": 1, \"command_id\": \"NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102\", \"status\": \"FAIL\", \"changes_made\": false, \"rollback_started\": false, \"rollback_restored\": null}\n"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
CHAT_OUTPUT_BEGIN
|
||||
COMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102
|
||||
STATUS=FAIL
|
||||
RC=3
|
||||
HOST=pve01
|
||||
MODE=change
|
||||
COMPONENT=newfi-newfdom-articles205-pack1-two-articles-public-smoke-corrected
|
||||
REFERENCE_REGISTER_CHECK=OK
|
||||
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
|
||||
ERROR_REGISTER_CHECK=OK
|
||||
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
|
||||
COMMAND_SHA256=52df1dc3ff6172b8b5f56dcda9503a23848dadf9b8443bc5d36b9affc45185b4
|
||||
DUPLICATE_FAILED_COMMAND_BLOCKED=false
|
||||
EXECUTION_STARTED=true
|
||||
CHANGE_DECLARED=true
|
||||
RESULT_CONTRACT_VALID=true
|
||||
RESULT_CONTRACT_STATUS=FAIL
|
||||
RESULT_CONTRACT_ERROR=NONE
|
||||
COMMAND_RC=3
|
||||
CHANGES_MADE=false
|
||||
ROLLBACK_STARTED=false
|
||||
ROLLBACK_RESTORED=null
|
||||
MUTATION_OUTCOME=NO_MUTATION
|
||||
SANITIZED=yes
|
||||
SECRETS_INCLUDED=no
|
||||
PRIVATE_ADDRESSES_INCLUDED=no
|
||||
RAW_EVIDENCE_SHA256=3b326b94cda2adf7220a7666df72b149dced195c3f8243e4edd1318e63484711
|
||||
SANITIZED_OUTPUT_SHA256=3b326b94cda2adf7220a7666df72b149dced195c3f8243e4edd1318e63484711
|
||||
OUTPUT_BEGIN
|
||||
NEWFI102_BEGIN
|
||||
COMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102
|
||||
NEWFI102_SAFE_REPORT={"changes_made": false, "decision": "FAIL_ARTICLES205_PACK1_HOLD", "error": "RuntimeError:GUEST:RuntimeError:PERR", "rollback_restored": null, "rollback_started": false}
|
||||
HOMELAB_RESULT_CONTRACT={"version": 1, "command_id": "NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102", "status": "FAIL", "changes_made": false, "rollback_started": false, "rollback_restored": null}
|
||||
|
||||
OUTPUT_END
|
||||
CHAT_OUTPUT_END
|
||||
+14
-14
File diff suppressed because one or more lines are too long
+15
-135
@@ -1,22 +1,22 @@
|
||||
CHAT_OUTPUT_BEGIN
|
||||
COMMAND_ID=SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2
|
||||
STATUS=OK
|
||||
RC=0
|
||||
COMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102
|
||||
STATUS=FAIL
|
||||
RC=3
|
||||
HOST=pve01
|
||||
MODE=read-only
|
||||
COMPONENT=infra-pve1-moldova-current-prod-callpath-readonly
|
||||
MODE=change
|
||||
COMPONENT=newfi-newfdom-articles205-pack1-two-articles-public-smoke-corrected
|
||||
REFERENCE_REGISTER_CHECK=OK
|
||||
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
|
||||
ERROR_REGISTER_CHECK=OK
|
||||
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
|
||||
COMMAND_SHA256=37ce436636242efdcf203b90c1a92dfa69ada981da23f62e14b4602369702589
|
||||
COMMAND_SHA256=52df1dc3ff6172b8b5f56dcda9503a23848dadf9b8443bc5d36b9affc45185b4
|
||||
DUPLICATE_FAILED_COMMAND_BLOCKED=false
|
||||
EXECUTION_STARTED=true
|
||||
CHANGE_DECLARED=false
|
||||
CHANGE_DECLARED=true
|
||||
RESULT_CONTRACT_VALID=true
|
||||
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
|
||||
RESULT_CONTRACT_STATUS=FAIL
|
||||
RESULT_CONTRACT_ERROR=NONE
|
||||
COMMAND_RC=0
|
||||
COMMAND_RC=3
|
||||
CHANGES_MADE=false
|
||||
ROLLBACK_STARTED=false
|
||||
ROLLBACK_RESTORED=null
|
||||
@@ -24,133 +24,13 @@ MUTATION_OUTCOME=NO_MUTATION
|
||||
SANITIZED=yes
|
||||
SECRETS_INCLUDED=no
|
||||
PRIVATE_ADDRESSES_INCLUDED=no
|
||||
RAW_EVIDENCE_SHA256=883672d81581efc0c1d92a09229e4b23c9e7899d7bd8e2f7a4a5a768e0902898
|
||||
SANITIZED_OUTPUT_SHA256=0e12c81ca87dc2aca47e61e36d9079f2d2971793fe68f8a3f4c1dae3974247cb
|
||||
RAW_EVIDENCE_SHA256=3b326b94cda2adf7220a7666df72b149dced195c3f8243e4edd1318e63484711
|
||||
SANITIZED_OUTPUT_SHA256=3b326b94cda2adf7220a7666df72b149dced195c3f8243e4edd1318e63484711
|
||||
OUTPUT_BEGIN
|
||||
ERROR_REGISTER_CHECK=OK
|
||||
REFERENCE_CHECK=OK
|
||||
AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED
|
||||
PROD_ENTRY_PRESENT=True
|
||||
PROD_ENTRY_IS_SYMLINK=False
|
||||
PROD_ENTRY_RESOLVED=/usr/local/sbin/homelab-backup-v2
|
||||
PROD_ENTRY_SIZE=1656
|
||||
PROD_ENTRY_SHA256=5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2
|
||||
PROD_CALLPATH_MATCH_LINE_COUNT=3
|
||||
PROD_CALLPATH_MATCH_LINES=3,4,24
|
||||
PROD_CALLPATH_CONTEXT_01_RANGE=1-11
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0001=#!/usr/bin/python3
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0002=from __future__ import annotations
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0003=import hashlib, importlib, os, pathlib, stat, sys
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0004=ACCEPTED=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b')
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0005=EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7da...
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0006=def sha(p):
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0007=h=hashlib.sha256()
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0008=with open(p,'rb',buffering=0) as f:
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0009=while True:
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0010=b=f.read(1048576)
|
||||
PROD_CALLPATH_CONTEXT_01_LINE_0011=if not b: break
|
||||
PROD_CALLPATH_CONTEXT_02_RANGE=20-26
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0020=p=ACCEPTED/name; s=os.lstat(p)
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0021=if not stat.S_ISREG(s.st_mode) or stat.S_ISLNK(s.st_mode) or s.st_uid!=0 or s.st_gid!=0 or stat.S_IMODE(s.st_mode)!=0o400 or sha(p)!=want: raise SystemExit('RELEASE_FILE_IDENTITY_'+name)
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0022=sys.dont_write_bytecode=True
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0023=sys.path.insert(0,str(ACCEPTED))
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0024=e=importlib.import_module('entry504')
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0025=return int(e.main())
|
||||
PROD_CALLPATH_CONTEXT_02_LINE_0026=if __name__=='__main__': raise SystemExit(main())
|
||||
PROD_RELEVANT_FUNCTION_COUNT=0
|
||||
PROD_IMPORT_COUNT=7
|
||||
PROD_IMPORT_01_LINE=2
|
||||
PROD_IMPORT_01_NAME=__future__.annotations
|
||||
PROD_IMPORT_02_LINE=3
|
||||
PROD_IMPORT_02_NAME=hashlib
|
||||
PROD_IMPORT_03_LINE=3
|
||||
PROD_IMPORT_03_NAME=importlib
|
||||
PROD_IMPORT_04_LINE=3
|
||||
PROD_IMPORT_04_NAME=os
|
||||
PROD_IMPORT_05_LINE=3
|
||||
PROD_IMPORT_05_NAME=pathlib
|
||||
PROD_IMPORT_06_LINE=3
|
||||
PROD_IMPORT_06_NAME=stat
|
||||
PROD_IMPORT_07_LINE=3
|
||||
PROD_IMPORT_07_NAME=sys
|
||||
PROD_EXEC_CALL_COUNT=0
|
||||
PROD_REFERENCED_PATH_COUNT=1
|
||||
PROD_REF_01_PATH=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b
|
||||
PROD_REF_01_EXISTS=True
|
||||
PROD_REF_01_IS_FILE=False
|
||||
PROD_TRANSPORT_SIGNATURE_COUNT=0
|
||||
ACCEPTED_TRANSPORT_SIGNATURE_COUNT=34
|
||||
ACCEPTED_TRANSPORT_SIG_01_LINE=16
|
||||
ACCEPTED_TRANSPORT_SIG_01_TEXT=OPERATOR_KEY=pathlib.Path('[SENSITIVE_PATH]
|
||||
ACCEPTED_TRANSPORT_SIG_02_LINE=17
|
||||
ACCEPTED_TRANSPORT_SIG_02_TEXT=VPS_KNOWN_HOSTS=CONFIG_ROOT/'vps_known_hosts'
|
||||
ACCEPTED_TRANSPORT_SIG_03_LINE=24
|
||||
ACCEPTED_TRANSPORT_SIG_03_TEXT=OPERATOR_KEY_FINGERPRINT='SHA256:wipXiBB3cpAwyWap9LcB185WjEEmDxtRJsI/UuMVAp0'
|
||||
ACCEPTED_TRANSPORT_SIG_04_LINE=413
|
||||
ACCEPTED_TRANSPORT_SIG_04_TEXT=return run([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,cmd],input=input,timeout=timeout,check=check)
|
||||
ACCEPTED_TRANSPORT_SIG_05_LINE=492
|
||||
ACCEPTED_TRANSPORT_SIG_05_TEXT=cmd=[SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote]
|
||||
ACCEPTED_TRANSPORT_SIG_06_LINE=537
|
||||
ACCEPTED_TRANSPORT_SIG_06_TEXT=else: run([SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200)
|
||||
ACCEPTED_TRANSPORT_SIG_07_LINE=543
|
||||
ACCEPTED_TRANSPORT_SIG_07_TEXT=def operator_key_fingerprint():
|
||||
ACCEPTED_TRANSPORT_SIG_08_LINE=544
|
||||
ACCEPTED_TRANSPORT_SIG_08_TEXT=if not OPERATOR_KEY.is_file() or OPERATOR_KEY.is_symlink(): raise BackupError('OPERATOR_KEY_MISSING')
|
||||
ACCEPTED_TRANSPORT_SIG_09_LINE=545
|
||||
ACCEPTED_TRANSPORT_SIG_09_TEXT=p=run(['ssh-keygen','-lf',str(OPERATOR_KEY),'-E','sha256'],timeout=30)
|
||||
ACCEPTED_TRANSPORT_SIG_10_LINE=548
|
||||
ACCEPTED_TRANSPORT_SIG_10_TEXT=if not m or m.group(1)!=OPERATOR_KEY_FINGERPRINT: raise BackupError('OPERATOR_KEY_FINGERPRINT_MISMATCH')
|
||||
ACCEPTED_TRANSPORT_SIG_11_LINE=565
|
||||
ACCEPTED_TRANSPORT_SIG_11_TEXT=def ensure_vps_known_hosts(targets):
|
||||
ACCEPTED_TRANSPORT_SIG_12_LINE=570
|
||||
ACCEPTED_TRANSPORT_SIG_12_TEXT=atomic_write(VPS_KNOWN_HOSTS,('\n'.join(lines)+'\n').encode(),0o600)
|
||||
ACCEPTED_TRANSPORT_SIG_13_LINE=572
|
||||
ACCEPTED_TRANSPORT_SIG_13_TEXT=def vps_ssh_argv(t, *, use_agent=False):
|
||||
ACCEPTED_TRANSPORT_SIG_14_LINE=573
|
||||
ACCEPTED_TRANSPORT_SIG_14_TEXT=a=[SSH,'-p',str(t['port']),'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o','UserKnownHostsFile='+str(VPS_KNOWN_HOSTS),'-o','ConnectTimeout=15']
|
||||
ACCEPTED_TRANSPORT_SIG_15_LINE=575
|
||||
ACCEPTED_TRANSPORT_SIG_15_TEXT=a += ['-o','IdentitiesOnly=no']
|
||||
ACCEPTED_TRANSPORT_SIG_16_LINE=577
|
||||
ACCEPTED_TRANSPORT_SIG_16_TEXT=a += ['-i',str(OPERATOR_KEY),'-o','IdentitiesOnly=yes','-o','IdentityAgent=none']
|
||||
ACCEPTED_TRANSPORT_SIG_17_LINE=581
|
||||
ACCEPTED_TRANSPORT_SIG_17_TEXT=def vps_run(t, remote_argv, *, input=None, timeout=300, use_agent=False, check=True):
|
||||
ACCEPTED_TRANSPORT_SIG_18_LINE=583
|
||||
ACCEPTED_TRANSPORT_SIG_18_TEXT=return run(vps_ssh_argv(t,use_agent=use_agent)+[remote],input=input,timeout=timeout,check=check)
|
||||
ACCEPTED_TRANSPORT_SIG_19_LINE=586
|
||||
ACCEPTED_TRANSPORT_SIG_19_TEXT=operator_key_fingerprint()
|
||||
ACCEPTED_TRANSPORT_SIG_20_LINE=587
|
||||
ACCEPTED_TRANSPORT_SIG_20_TEXT=ensure_vps_known_hosts(targets)
|
||||
ACCEPTED_TRANSPORT_SIG_21_LINE=588
|
||||
ACCEPTED_TRANSPORT_SIG_21_TEXT=pub=run(['ssh-keygen','-y','-f',str(OPERATOR_KEY)],timeout=30).stdout.strip()+b'\n'
|
||||
ACCEPTED_TRANSPORT_SIG_22_LINE=592
|
||||
ACCEPTED_TRANSPORT_SIG_22_TEXT=probe=vps_run(t,['true'],timeout=30,use_agent=False,check=False)
|
||||
ACCEPTED_TRANSPORT_SIG_23_LINE=594
|
||||
ACCEPTED_TRANSPORT_SIG_23_TEXT=results[t['logical_id']]='ALREADY_OPERATOR_KEY'; continue
|
||||
ACCEPTED_TRANSPORT_SIG_24_LINE=600
|
||||
ACCEPTED_TRANSPORT_SIG_24_TEXT=vps_run(t,['true'],timeout=30,use_agent=False)
|
||||
ACCEPTED_TRANSPORT_SIG_25_LINE=604
|
||||
ACCEPTED_TRANSPORT_SIG_25_TEXT=vps_run(us,['true'],timeout=30,use_agent=False)
|
||||
ACCEPTED_TRANSPORT_SIG_26_LINE=605
|
||||
ACCEPTED_TRANSPORT_SIG_26_TEXT=results[us['logical_id']]='ALREADY_US_OPERATOR_KEY'
|
||||
ACCEPTED_TRANSPORT_SIG_27_LINE=609
|
||||
ACCEPTED_TRANSPORT_SIG_27_TEXT=p=vps_run(t,['sh','-c',command],timeout=120,use_agent=False)
|
||||
ACCEPTED_TRANSPORT_SIG_28_LINE=617
|
||||
ACCEPTED_TRANSPORT_SIG_28_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]
|
||||
ACCEPTED_TRANSPORT_SIG_29_LINE=627
|
||||
ACCEPTED_TRANSPORT_SIG_29_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]
|
||||
ACCEPTED_TRANSPORT_SIG_30_LINE=664
|
||||
ACCEPTED_TRANSPORT_SIG_30_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]
|
||||
ACCEPTED_TRANSPORT_SIG_31_LINE=851
|
||||
ACCEPTED_TRANSPORT_SIG_31_TEXT=if OPERATOR_KEY.exists(): p.append('root/.ssh/id_ed25519_netbird_operator')
|
||||
ACCEPTED_TRANSPORT_SIG_32_LINE=852
|
||||
ACCEPTED_TRANSPORT_SIG_32_TEXT=if pathlib.Path(str(OPERATOR_KEY)+'.pub').exists(): p.append('root/.ssh/id_ed25519_netbird_operator.pub')
|
||||
ACCEPTED_TRANSPORT_SIG_33_LINE=868
|
||||
ACCEPTED_TRANSPORT_SIG_33_TEXT=pipe_to_zstd([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote],payload,timeout=600)
|
||||
ACCEPTED_TRANSPORT_SIG_34_LINE=933
|
||||
ACCEPTED_TRANSPORT_SIG_34_TEXT=print('VPS_OPERATOR_KEY_BOOTSTRAP='+json.dumps(boots,sort_keys=True,separators=(',',':')))
|
||||
VPS556R2_DECISION=CURRENT_PROD_ENTRY_DELEGATES_TO_LOCAL_COMPONENT
|
||||
VPS556R2_NEXT_GATE=READ_CURRENT_DELEGATED_COMPONENT
|
||||
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
|
||||
NEWFI102_BEGIN
|
||||
COMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102
|
||||
NEWFI102_SAFE_REPORT={"changes_made": false, "decision": "FAIL_ARTICLES205_PACK1_HOLD", "error": "RuntimeError:GUEST:RuntimeError:PERR", "rollback_restored": null, "rollback_started": false}
|
||||
HOMELAB_RESULT_CONTRACT={"version": 1, "command_id": "NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-102", "status": "FAIL", "changes_made": false, "rollback_started": false, "rollback_restored": null}
|
||||
|
||||
OUTPUT_END
|
||||
CHAT_OUTPUT_END
|
||||
|
||||
Reference in New Issue
Block a user