From 53084e1343f306cd509ac190e045e2337d09a093 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 21:38:15 -0500 Subject: [PATCH 01/17] Temporarily export source for native custom game fix --- .github/workflows/export-fix-source.yml | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/export-fix-source.yml diff --git a/.github/workflows/export-fix-source.yml b/.github/workflows/export-fix-source.yml new file mode 100644 index 00000000..e71d6819 --- /dev/null +++ b/.github/workflows/export-fix-source.yml @@ -0,0 +1,28 @@ +name: Export fix source + +on: + push: + branches: + - agent/fix-native-custom-games + workflow_dispatch: + +permissions: + contents: read + +jobs: + export: + runs-on: ubuntu-latest + steps: + - name: Check out source + uses: actions/checkout@v4 + with: + lfs: true + - name: Create source archive + run: | + tar --exclude=.git --exclude=.github/workflows/export-fix-source.yml -czf ../void-arena-fix-source.tar.gz . + - name: Upload source archive + uses: actions/upload-artifact@v4 + with: + name: void-arena-fix-source-${{ github.sha }} + path: ../void-arena-fix-source.tar.gz + retention-days: 1 From 6af68510d4fd1f722f3840017bda30ca4b16f85e Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 21:38:52 -0500 Subject: [PATCH 02/17] Trigger source export for native custom game fix --- .github/workflows/export-fix-source.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/export-fix-source.yml b/.github/workflows/export-fix-source.yml index e71d6819..89585360 100644 --- a/.github/workflows/export-fix-source.yml +++ b/.github/workflows/export-fix-source.yml @@ -4,6 +4,9 @@ on: push: branches: - agent/fix-native-custom-games + pull_request: + branches: + - main workflow_dispatch: permissions: From adfdd18e3f61e81b67137028ea6d16428a4b70e1 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 21:39:46 -0500 Subject: [PATCH 03/17] Fix source export artifact path --- .github/workflows/export-fix-source.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/export-fix-source.yml b/.github/workflows/export-fix-source.yml index 89585360..83049351 100644 --- a/.github/workflows/export-fix-source.yml +++ b/.github/workflows/export-fix-source.yml @@ -22,10 +22,11 @@ jobs: lfs: true - name: Create source archive run: | - tar --exclude=.git --exclude=.github/workflows/export-fix-source.yml -czf ../void-arena-fix-source.tar.gz . + mkdir -p .tmp + tar --exclude=.git --exclude=.tmp --exclude=.github/workflows/export-fix-source.yml -czf .tmp/void-arena-fix-source.tar.gz . - name: Upload source archive uses: actions/upload-artifact@v4 with: name: void-arena-fix-source-${{ github.sha }} - path: ../void-arena-fix-source.tar.gz + path: .tmp/void-arena-fix-source.tar.gz retention-days: 1 From dde43a8fd1c5aa4d6338e7a877a173813073d638 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 21:59:51 -0500 Subject: [PATCH 04/17] Stage native custom game fix patch 1/3 --- .github/native-fix.chunk.00 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-fix.chunk.00 diff --git a/.github/native-fix.chunk.00 b/.github/native-fix.chunk.00 new file mode 100644 index 00000000..a0fd7bea --- /dev/null +++ b/.github/native-fix.chunk.00 @@ -0,0 +1 @@ +ZGlmZiAtLWdpdCBhL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cyBiL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cwppbmRleCAxNTdjZjU4Li43Y2RjNTlkIDEwMDY0NAotLS0gYS9jbGllbnQvZGVmaW5pdGlvbnMvZ2xvYmFsLmQudHMKKysrIGIvY2xpZW50L2RlZmluaXRpb25zL2dsb2JhbC5kLnRzCkBAIC0xMTAsMTkgKzExMCw3IEBAIHR5cGUgTW9kdWxlVHlwZSA9IHsKICAgfQogCiAgIGNsdXN0ZXI6IHsKLSAgICBvcGVuQ3JlYXRlR2FtZTogKCkgPT4gdm9pZAotICAgIHN1Ym1pdENyZWF0ZUdhbWU6IChmb3JtOiB7Ci0gICAgICB0aXRsZTogc3RyaW5nCi0gICAgICBtb2RlOiBzdHJpbmcKLSAgICAgIG1hcDogc3RyaW5nCi0gICAgICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gICAgICBwYXNzd29yZDogc3RyaW5nCi0gICAgICBib3RzOiBudW1iZXIKLSAgICAgIHNraWxsOiBudW1iZXIKLSAgICAgIGR1cmF0aW9uOiBudW1iZXIKLSAgICB9KSA9PiB2b2lkCiAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHZvaWQKLSAgICBwcm9tcHRKb2luOiAobmFtZTogc3RyaW5nKSA9PiB2b2lkCiAgICAgY29ubmVjdDogKG5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4gdm9pZAogICAgIHNlbmQ6IChjaGFubmVsOiBudW1iZXIsIGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKSA9PiB2b2lkCiAgICAgcmVjZWl2ZTogKGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aFB0cjogbnVtYmVyKSA9PiB2b2lkCmRpZmYgLS1naXQgYS9jbGllbnQvc3JjL2luZGV4LnRzeCBiL2NsaWVudC9zcmMvaW5kZXgudHN4CmluZGV4IGM5ZWE0Y2UuLjAzNGNhZGEgMTAwNjQ0Ci0tLSBhL2NsaWVudC9zcmMvaW5kZXgudHN4CisrKyBiL2NsaWVudC9zcmMvaW5kZXgudHN4CkBAIC04LDEzICs4LDExIEBAIGltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nCiBpbXBvcnQgewogICBDZW50ZXIsCiAgIENoYWtyYVByb3ZpZGVyLAotICBCdXR0b24sCiAgIGV4dGVuZFRoZW1lLAogICBGbGV4LAogICBCb3gsCiAgIFZTdGFjaywKICAgSGVhZGluZywKLSAgU3BhY2VyLAogfSBmcm9tICdAY2hha3JhLXVpL3JlYWN0JwogCiBpbXBvcnQgdHlwZSB7IFRoZW1lQ29uZmlnIH0gZnJvbSAnQGNoYWtyYS11aS9yZWFjdCcKQEAgLTk4LDY3ICs5Niw2IEBAIGNvbnN0IERyb3BUYXJnZXQgPSBzdHlsZWQuZGl2YAogICB6LWluZGV4OiAyOwogYAogCi1jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkLmRpdmAKLSAgcG9zaXRpb246IGZpeGVkOwotICBpbnNldDogMDsKLSAgei1pbmRleDogMjA7Ci0gIGRpc3BsYXk6IGZsZXg7Ci0gIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gIGp1c3RpZnktY29udGVudDogY2VudGVyOwotICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzYpOwotICBwb2ludGVyLWV2ZW50czogYXV0bzsKLWAKLQotY29uc3QgTW9kYWxDYXJkID0gc3R5bGVkLmRpdmAKLSAgd2lkdGg6IG1pbig5MnZ3LCA1MjBweCk7Ci0gIG1heC1oZWlnaHQ6IDg4dmg7Ci0gIG92ZXJmbG93LXk6IGF1dG87Ci0gIHBhZGRpbmc6IDI0cHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7Ci0gIGJvcmRlci1yYWRpdXM6IDEwcHg7Ci0gIGJhY2tncm91bmQ6ICMxMDEzMTg7Ci0gIGNvbG9yOiAjZmZmOwotICBib3gtc2hhZG93OiAwIDI0cHggODBweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwotCi0gIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMTRweCAwIDZweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogI2NiZDVlMDsgfQotICBpbnB1dCwgc2VsZWN0IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nOiAxMHB4IDEycHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzNiNDI1MDsKLSAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgYmFja2dyb3VuZDogIzE5MWUyNzsKLSAgICBjb2xvcjogI2ZmZjsKLSAgfQotICAucm93IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDEycHg7IH0KLSAgLmFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyBnYXA6IDEwcHg7IG1hcmdpbi10b3A6IDIycHg7IH0KLSAgYnV0dG9uIHsgcGFkZGluZzogMTBweCAxNnB4OyBib3JkZXItcmFkaXVzOiA2cHg7IGJvcmRlcjogMDsgY3Vyc29yOiBwb2ludGVyOyB9Ci0gIGJ1dHRvbi5wcmltYXJ5IHsgYmFja2dyb3VuZDogI2U4ZWRmNTsgY29sb3I6ICMxMTE4Mjc7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KLSAgYnV0dG9uLnNlY29uZGFyeSB7IGJhY2tncm91bmQ6ICMyYTMwM2I7IGNvbG9yOiAjZmZmOyB9Ci0gIGJ1dHRvbjpkaXNhYmxlZCB7IG9wYWNpdHk6IDAuNTU7IGN1cnNvcjogd2FpdDsgfQotYAotCi10eXBlIENyZWF0ZUdhbWVGb3JtID0gewotICB0aXRsZTogc3RyaW5nCi0gIG1vZGU6IHN0cmluZwotICBtYXA6IHN0cmluZwotICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gIHBhc3N3b3JkOiBzdHJpbmcKLSAgYm90czogbnVtYmVyCi0gIHNraWxsOiBudW1iZXIKLSAgZHVyYXRpb246IG51bWJlcgotfQotCi1jb25zdCBERUZBVUxUX0NSRUFURV9GT1JNOiBDcmVhdGVHYW1lRm9ybSA9IHsKLSAgdGl0bGU6ICdDdXN0b20gTWF0Y2gnLAotICBtb2RlOiAnZmZhJywKLSAgbWFwOiAnY29tcGxleCcsCi0gIHZpc2liaWxpdHk6ICd1bmxpc3RlZCcsCi0gIHBhc3N3b3JkOiAnJywKLSAgYm90czogMCwKLSAgc2tpbGw6IDcwLAotICBkdXJhdGlvbjogMzAwLAotfQotCiBjb25zdCBlbmNvZGVDb21tYW5kVmFsdWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7CiAgIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKQogICBsZXQgYmluYXJ5ID0gJycKQEAgLTMwMyw5ICsyNDAsNiBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgfSwKICAgfSkKIAotICBjb25zdCBbY3JlYXRlR2FtZU9wZW4sIHNldENyZWF0ZUdhbWVPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlR2FtZUJ1c3ksIHNldENyZWF0ZUdhbWVCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlRm9ybSwgc2V0Q3JlYXRlRm9ybV0gPSBSZWFjdC51c2VTdGF0ZTxDcmVhdGVHYW1lRm9ybT4oREVGQVVMVF9DUkVBVEVfRk9STSkKIAogICBjb25zdCBpbnRlcm5hbFNlcnZlcnNSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPihgbmV3Z3VpIGludGVncmF0ZWQgWwogICAgICAgICBndWl0YWIgInNlcnZlcnMiCkBAIC01MTcsNiArNDUxLDIwOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgLy8gICAke3JlbmRlckRpc2NvcmRCdXR0b24oYXV0aFN0YXRlKX0KIAogICAgIGNvbnN0IG1lbnUgPSBgCisgICAgLy8gTmF0aXZlIFNhdWVyYnJhdGVuIGN1c3RvbS1nYW1lIG1lbnVzLiBUaGVzZSBkZWxpYmVyYXRlbHkgbGl2ZSBpbnNpZGUgdGhlCisgICAgLy8gZW5naW5lIEdVSSBzbyBjdXJzb3IgbG9ja2luZywga2V5Ym9hcmQgZm9jdXMsIEVTQywgYW5kIHN0eWxpbmcgYWxsIGJlaGF2ZQorICAgIC8vIGV4YWN0bHkgbGlrZSB0aGUgcmVzdCBvZiB0aGUgZ2FtZS4KKyAgICBjZ19tb2RlID0gImZmYSIKKyAgICBjZ19tb2RlX2xhYmVsID0gIkZyZWUgRm9yIEFsbCIKKyAgICBjZ19tYXAgPSAiY29tcGxleCIKKyAgICBjZ192aXNpYmlsaXR5ID0gMgorICAgIGNnX3Bhc3N3b3JkID0gIiIKKyAgICBjZ19ib3RzID0gMAorICAgIGNnX3NraWxsID0gNzAKKyAgICBjZ19kdXJhdGlvbiA9IDMwMAorICAgIGNnX2pvaW5fdGFyZ2V0ID0gIiIKKyAgICBjZ19qb2luX3Bhc3N3b3JkID0gIiIKKworICAgIGNnc2VsZWN0bWFwID0gWworICAgICAgICBjZ19tYXAgPSAkYXJnMQorICAgICAgICBzaG93Z3VpIGN1c3RvbWdhbWUKKyAgICBdCisKKyAgICBnZW5jZ21hcGl0ZW1zID0gWworICAgICAgICBsb29wbGlzdCBjdXJtYXAgJGFyZzEgWworICAgICAgICAgICAgZ3VpYnV0dG9uICRjdXJtYXAgKGNvbmNhdHdvcmQgImNnc2VsZWN0bWFwICIgJGN1cm1hcCkgImN1YmUiCisgICAgICAgIF0KKyAgICBdCisKKyAgICBidWlsZGNnY3VzdG9tbWFwcyA9IFsKKyAgICAgICAgY2djdXN0b21tYXBzID0gIiIKKyAgICAgICAgbG9vcGZpbGVzIGN1cm1hcCAicGFja2FnZXMvYmFzZSIgIm9neiIgWworICAgICAgICAgICAgaWYgKDwgKGluZGV4b2YgJGFsbG1hcHMgJGN1cm1hcCkgMCkgWworICAgICAgICAgICAgICAgIGNnY3VzdG9tbWFwcyA9IChjb25jYXQgJGNnY3VzdG9tbWFwcyAoZXNjYXBlICRjdXJtYXApKQorICAgICAgICAgICAgXQorICAgICAgICBdCisgICAgICAgIGNnY3VzdG9tbWFwcyA9IChzb3J0bGlzdCAkY2djdXN0b21tYXBzIHggeSBbbmF0dXJhbHNvcnQgJHggJHldKQorICAgIF0KKworICAgIGNnY3JlYXRlID0gWworICAgICAgICBpZiAoJiYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgKDwgKHN0cmxlbiAkY2dfcGFzc3dvcmQpIDMpKSBbCisgICAgICAgICAgICBlY2hvICJeZjNQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycy4iCisgICAgICAgIF0gWworICAgICAgICAgICAgY2xlYXJndWkgMQorICAgICAgICAgICAgY3JlYXRlZ2FtZSAoY29uY2F0d29yZCAkY2dfbW9kZSAifCIgJGNnX21hcCAifCIgJGNnX3Zpc2liaWxpdHkgInwiICRjZ19wYXNzd29yZCAifCIgJGNnX2JvdHMgInwiICRjZ19za2lsbCAifCIgJGNnX2R1cmF0aW9uKSAiIgorICAgICAgICBdCisgICAgXQorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWUgWworICAgICAgICBndWl0ZXh0ICJDcmVhdGUgQ3VzdG9tIEdhbWUiIDAKKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTW9kZSIgMAorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAoY29uY2F0d29yZCAiICAiICRjZ19tb2RlX2xhYmVsKSBbc2hvd2d1aSBjdXN0b21nYW1lbW9kZV0gImN1YmUiCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTWFwIiAwCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uIChjb25jYXR3b3JkICIgICIgJGNnX21hcCkgW2J1aWxkY2djdXN0b21tYXBzOyBzaG93Z3VpIGN1c3RvbWdhbWVtYXBzXSAiY3ViZSIKKyAgICAgICAgICAgICAgICBndWl0ZXh0ICJWaXNpYmlsaXR5IiAwCisgICAgICAgICAgICAgICAgZ3VpcmFkaW8gIlB1YmxpYyAtIGxpc3RlZCBmb3IgZXZlcnlvbmUiIGNnX3Zpc2liaWxpdHkgMAorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJQYXNzd29yZCBwcm90ZWN0ZWQgLSBsaXN0ZWQgd2l0aCBhIGxvY2siIGNnX3Zpc2liaWxpdHkgMQorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJVbmxpc3RlZCAtIGpvaW4gYnkgVVJMIG9yIHJvb20gY29kZSIgY2dfdmlzaWJpbGl0eSAyCisgICAgICAgICAgICAgICAgaWYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgWworICAgICAgICAgICAgICAgICAgICBndWl0ZXh0ICJQYXNzd29yZCIgMAorICAgICAgICAgICAgICAgICAgICBndWlmaWVsZCBjZ19wYXNzd29yZCAyOAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiQm90czogIiAkY2dfYm90cykgMAorICAgICAgICAgICAgICAgIGd1aXNsaWRlciBjZ19ib3RzIDAgMTIKKyAgICAgICAgICAgICAgICBndWl0ZXh0IChjb25jYXR3b3JkICJCb3Qgc2tpbGw6ICIgJGNnX3NraWxsKSAwCisgICAgICAgICAgICAgICAgZ3Vpc2xpZGVyIGNnX3NraWxsIDEgMTAxCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiUm91bmQgbGVuZ3RoOiAiICRjZ19kdXJhdGlvbiAiIHNlY29uZHMiKSAwCisgICAgICAgICAgICAgICAgZ3Vpc2xpZGVyIGNnX2R1cmF0aW9uIDE4MCA5MDAKKyAgICAgICAgICAgICAgICBndWlzdHJ1dCAxCisgICAgICAgICAgICAgICAgZ3VpaW1hZ2UgKGNvbmNhdHdvcmQgInBhY2thZ2VzL2Jhc2UvIiAkY2dfbWFwICIuanBnIikgW10gNCAxICJkYXRhL2N1YmUucG5nIiAkY2dfbWFwCisgICAgICAgICAgICBdCisgICAgICAgIF0KKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpYnV0dG9uICJDcmVhdGUgZ2FtZSIgW2NnY3JlYXRlXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gImN1c3RvbSBnYW1lIgorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWVtb2RlIFsKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkZyZWUgRm9yIEFsbCIgW2NnX21vZGUgPSAiZmZhIjsgY2dfbW9kZV9sYWJlbCA9ICJGcmVlIEZvciBBbGwiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJUZWFtcGxheSIgW2NnX21vZGUgPSAidGVhbXBsYXkiOyBjZ19tb2RlX2xhYmVsID0gIlRlYW1wbGF5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiSW5zdGFnaWIiIFtjZ19tb2RlID0gImluc3RhIjsgY2dfbW9kZV9sYWJlbCA9ICJJbnN0YWdpYiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIFRlYW0iIFtjZ19tb2RlID0gImluc3RhdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiSW5zdGFnaWIgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkVmZmljaWVuY3kiIFtjZ19tb2RlID0gImVmZmljIjsgY2dfbW9kZV9sYWJlbCA9ICJFZmZpY2llbmN5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiRWZmaWNpZW5jeSBUZWFtIiBbY2dfbW9kZSA9ICJlZmZpY3RlYW0iOyBjZ19tb2RlX2xhYmVsID0gIkVmZmljaWVuY3kgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MiIFtjZ19tb2RlID0gInRhYyI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MgVGVhbSIgW2NnX21vZGUgPSAidGFjdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyBUZWFtIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgXQorICAgICAgICAgICAgZ3VpYmFyCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkNhcHR1cmUiIFtjZ19tb2RlID0gImNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIkNhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJSZWdlbiBDYXB0dXJlIiBbY2dfbW9kZSA9ICJyZWdlbmNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIlJlZ2VuIENhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJDVEYiIFtjZ19tb2RlID0gImN0ZiI7IGNnX21vZGVfbGFiZWwgPSAiQ2FwdHVyZSBUaGUgRmxhZyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIENURiIgW2NnX21vZGUgPSAiaW5zdGFjdGYiOyBjZ19tb2RlX2xhYmVsID0gIkluc3RhZ2liIENURiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlByb3RlY3QiIFtjZ19tb2RlID0gInByb3RlY3QiOyBjZ19tb2RlX2xhYmVsID0gIlByb3RlY3QiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJIb2xkIiBbY2dfbW9kZSA9ICJob2xkIjsgY2dfbW9kZV9sYWJlbCA9ICJIb2xkIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiQ29sbGVjdCIgW2NnX21vZGUgPSAiY29sbGVjdCI7IGNnX21vZGVfbGFiZWwgPSAiQ29sbGVjdCI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgIF0KKyAgICAgICAgXQorICAgIF0gImdhbWUgbW9kZSIKKworICAgIG5ld2d1aSBjdXN0b21nYW1lbWFwcyBbCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzOF0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHM5XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDQiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczEwXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczExXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImNhcHR1cmUgMSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczJdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczNdCisgICAgICAgIF0KKyAgICAgICAgZ3VpdGFiICJjYXB0dXJlIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM0XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM1XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY2FwdHVyZSAzIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNhcHR1cmVtYXBzN10KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDEiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgIm90aGVyIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNvbmNlcHRtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkc3BtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkcnBnbWFwc10KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImN1c3RvbSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjZ2N1c3RvbW1hcHNdCisgICAgICAgIF0KKyAgICBdICJjaG9vc2UgbWFwIgorCisgICAgbmV3Z3VpIGpvaW5wYXNzd29yZCBbCisgICAgICAgIGd1aXRleHQgKGNvbmNhdHdvcmQgIlBhc3N3b3JkIHJlcXVpcmVkIGZvciAiICRjZ19qb2luX3RhcmdldCkgMAorICAgICAgICBndWlmaWVsZCBjZ19qb2luX3Bhc3N3b3JkIDI4CisgICAgICAgIGd1aWJhcgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aWJ1dHRvbiAiSm9pbiIgW2NsZWFyZ3VpIDE7IGpvaW4gJGNnX2pvaW5fdGFyZ2V0ICRjZ19qb2luX3Bhc3N3b3JkXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gInBhc3N3b3JkIgorCiAgICAgbmV3Z3VpIGNvbnRlbnQgWwogICAgICAgICBndWlidXR0b24gIm1vZHMuLiIgICJzaG93Z3VpIG1vZHMiCiAgICAgICAgIGd1aWJ1dHRvbiAicHV0IG1vZHMgaW4gdXJsLi4iICBbanMgIk1vZHVsZS5hc3NldHMubW9kc1RvVVJMKCkiXQpAQCAtNTUzLDcgKzY4OSw3IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICAgICAgICBndWliYXIKICAgICAgIF0KICAgICAgIGd1aWJ1dHRvbiAic2VydmVyIGJyb3dzZXIuLiIgInNob3dndWkgaW50ZWdyYXRlZCIKLSAgICAgIGd1aWJ1dHRvbiAiY3JlYXRlIGN1c3RvbSBnYW1lLi4uIiBbanMgIk1vZHVsZS5jbHVzdGVyLm9wZW5DcmVhdGVHYW1lKCkiXQorICAgICAgZ3VpYnV0dG9uICJjcmVhdGUgY3VzdG9tIGdhbWUuLi4iIFtzaG93Z3VpIGN1c3RvbWdhbWVdCiAgICAgICBndWlidXR0b24gInJhbmRvbSBtYXAuLiIgICJtYXAgcmFuZG9tIgogICAgICAgZ3VpYnV0dG9uICJjb250ZW50Li4iICJzaG93Z3VpIGNvbnRlbnQiCiAgICAgICBpZiAoJGZ1bGxzY3JlZW4pIFsKQEAgLTg2MSw0NyArOTk3LDU1IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICB9CiAKICAgICBNb2R1bGUuY2x1c3RlciA9IHsKLSAgICAgIG9wZW5DcmVhdGVHYW1lOiAoKSA9PiB7Ci0gICAgICAgIHNldENyZWF0ZUZvcm0oREVGQVVMVF9DUkVBVEVfRk9STSkKLSAgICAgICAgc2V0Q3JlYXRlR2FtZU9wZW4odHJ1ZSkKLSAgICAgIH0sCi0gICAgICBzdWJtaXRDcmVhdGVHYW1lOiAoZm9ybTogQ3JlYXRlR2FtZUZvcm0pID0+IHsKKyAgICAgIGNyZWF0ZUdhbWU6IChwcmVzZXQ6IHN0cmluZywgbW9kZTogc3RyaW5nKSA9PiB7CiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewotICAgICAgICAgIHNldENyZWF0ZUdhbWVCdXN5KHRydWUpCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChmb3JtLnZpc2liaWxpdHkgPT09ICdwYXNzd29yZCcgJiYgZm9ybS5wYXNzd29yZC50cmltKCkubGVuZ3RoIDwgMykgeworICAgICAgICAgICAgbGV0IGdhbWVNb2RlID0gbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScKKyAgICAgICAgICAgIGxldCBtYXAgPSAnY29tcGxleCcKKyAgICAgICAgICAgIGxldCB2aXNpYmlsaXR5ID0gJ3VubGlzdGVkJworICAgICAgICAgICAgbGV0IHBhc3N3b3JkID0gJycKKyAgICAgICAgICAgIGxldCBib3RzID0gMAorICAgICAgICAgICAgbGV0IHNraWxsID0gNzAKKyAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IDMwMAorCisgICAgICAgICAgICAvLyBOYXRpdmUgQ3ViZVNjcmlwdCBHVUkgc2VuZHMgb25lIGNvbXBhY3Qgc3BlYyB0aHJvdWdoIHRoZSBleGlzdGluZworICAgICAgICAgICAgLy8gZW5naW5lIGNyZWF0ZWdhbWUgY29tbWFuZC4gUGFyc2UgdmFsdWVzIGZyb20gdGhlIGVuZCBzbyBwYXNzd29yZHMKKyAgICAgICAgICAgIC8vIG1heSBjb250YWluIHRoZSBkZWxpbWl0ZXIgd2l0aG91dCBjb3JydXB0aW5nIHRoZSByZW1haW5pbmcgZmllbGRzLgorICAgICAgICAgICAgaWYgKHByZXNldC5pbmNsdWRlcygnfCcpKSB7CisgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gcHJlc2V0LnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgZ2FtZU1vZGUgPSBwYXJ0cy5zaGlmdCgpIHx8ICdmZmEnCisgICAgICAgICAgICAgIG1hcCA9IHBhcnRzLnNoaWZ0KCkgfHwgJ2NvbXBsZXgnCisgICAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlDb2RlID0gcGFydHMuc2hpZnQoKSB8fCAnMicKKyAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9IHZpc2liaWxpdHlDb2RlID09PSAnMCcgPyAncHVibGljJyA6IHZpc2liaWxpdHlDb2RlID09PSAnMScgPyAncGFzc3dvcmQnIDogJ3VubGlzdGVkJworICAgICAgICAgICAgICBkdXJhdGlvbiA9IE51bWJlcihwYXJ0cy5wb3AoKSB8fCAzMDApCisgICAgICAgICAgICAgIHNraWxsID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDcwKQorICAgICAgICAgICAgICBib3RzID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDApCisgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFydHMuam9pbignfCcpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2aXNpYmlsaXR5ID09PSAncGFzc3dvcmQnICYmIHBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuJykKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBgJHtnYW1lTW9kZX0gb24gJHttYXB9YAogICAgICAgICAgICAgY29uc3QgYXJncyA9IFsKICAgICAgICAgICAgICAgJ2NyZWF0ZWdhbWUnLAotICAgICAgICAgICAgICBmb3JtLm1vZGUsCi0gICAgICAgICAgICAgIGZvcm0ubWFwLAotICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke2Zvcm0udmlzaWJpbGl0eX1gLAotICAgICAgICAgICAgICBgcGFzc3dvcmQ9JHtlbmNvZGVDb21tYW5kVmFsdWUoZm9ybS5wYXNzd29yZCl9YCwKLSAgICAgICAgICAgICAgYGJvdHM9JHtmb3JtLmJvdHN9YCwKLSAgICAgICAgICAgICAgYHNraWxsPSR7Zm9ybS5za2lsbH1gLAotICAgICAgICAgICAgICBgZHVyYXRpb249JHtmb3JtLmR1cmF0aW9ufWAsCi0gICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZShmb3JtLnRpdGxlKX1gLAorICAgICAgICAgICAgICBnYW1lTW9kZSwKKyAgICAgICAgICAgICAgbWFwLAorICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke3Zpc2liaWxpdHl9YCwKKyAgICAgICAgICAgICAgYHBhc3N3b3JkPSR7ZW5jb2RlQ29tbWFuZFZhbHVlKHBhc3N3b3JkKX1gLAorICAgICAgICAgICAgICBgYm90cz0ke01hdGgubWF4KDAsIE1hdGgubWluKDEyLCBNYXRoLnRydW5jKGJvdHMpKSl9YCwKKyAgICAgICAgICAgICAgYHNraWxsPSR7TWF0aC5tYXgoMSwgTWF0aC5taW4oMTAxLCBNYXRoLnRydW5jKHNraWxsKSkpfWAsCisgICAgICAgICAgICAgIGBkdXJhdGlvbj0ke01hdGgubWF4KDE4MCwgTWF0aC5taW4oOTAwLCBNYXRoLnRydW5jKGR1cmF0aW9uKSkpfWAsCisgICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZSh0aXRsZSl9YCwKICAgICAgICAgICAgIF0KICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoYXJncy5qb2luKCcgJykpCi0gICAgICAgICAgICBzZXRDcmVhdGVHYW1lT3BlbihmYWxzZSkKICAgICAgICAgICAgIGxvZy5zdWNjZXNzKCdjdXN0b20gZ2FtZSBjcmVhdGVkOyBzaGFyZSB0aGUgVVJMIG9yIHJvb20gY29kZSB3aXRoIGZyaWVuZHMnKQogICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgIGxvZy5lcnJvcihgZmFpbGVkIHRvIGNyZWF0ZSBnYW1lOiAke2V9YCkKLSAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgc2V0Q3JlYXRlR2FtZUJ1c3koZmFsc2UpCiAgICAgICAgICAgfQogICAgICAgICB9KSgpCiAgICAgICB9LAotICAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHsKLSAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uREVGQVVMVF9DUkVBVEVfRk9STSwgbW9kZTogbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScgfQotICAgICAgICBNb2R1bGUuY2x1c3Rlci5zdWJtaXRDcmVhdGVHYW1lKG5leHQpCi0gICAgICB9LAotICAgICAgcHJvbXB0Sm9pbjogKG5hbWU6IHN0cmluZykgPT4gewotICAgICAgICBjb25zdCBwYXNzd29yZCA9IHdpbmRvdy5wcm9tcHQoYFBhc3N3b3JkIGZvciAke25hbWV9OmApCi0gICAgICAgIGlmIChwYXNzd29yZCA9PSBudWxsKSByZXR1cm4KLSAgICAgICAgTW9kdWxlLmNsdXN0ZXIuY29ubmVjdChuYW1lLCBwYXNzd29yZCkKLSAgICAgIH0sCiAgICAgICBjb25uZWN0OiAobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiB7CiAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5hbWUubGVuZ3RoID09PSAwID8gJ2ZmYScgOiBuYW1lCiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewpAQCAtOTExLDcgKzEwNTUsOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlKQogICAgICAgICAgICAgaWYgKCFwYXNzd29yICYmIG1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaW5jb3JyZWN0IHBhc3N3b3JkJykpIHsKLSAgICAgICAgICAgICAgTW9kdWxlLmNsdXN0ZXIucHJvbXB0Sm9pbih0YXJnZXQpCisgICAgICAgICAgICAgIGNvbnN0IHNhZmVUYXJnZXQgPSB0YXJnZXQucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgJycpCisgICAgICAgICAgICAgIEJhbmFuYUJyZWFkLmV4ZWN1dGUoYGNnX2pvaW5fdGFyZ2V0ID0gIiR7c2FmZVRhcmdldH0iOyBjZ19qb2luX3Bhc3N3b3JkID0gIiI7IHNob3dndWkgam9pbnBhc3N3b3JkYCkKICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb2cuZXJyb3IoYGZhaWxlZCB0byBqb2luICR7dGFyZ2V0fTogJHtlfWApCkBAIC0xMDI2LDcgKzExNzEsNyBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgYm90cyA9IHMuQm90cyA+IDAgPyBgLCAke3MuQm90c30gYm90JHtzLkJvdHMgPT09IDEgPyAnJyA6ICdzJ31gIDogJycKICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGAke2xvY2t9JHtjdXN0b219JHtzLkFsaWFzfSAoXmYyJHtzLk51bUNsaWVudHN9IHBsYXllciR7cy5OdW1DbGllbnRzID09PSAxID8gJycgOiAncyd9JHtib3RzfV5mNykgLSAke21vZGVOYW1lKHMuTW9kZSl9ICR7cy5NYXB9YAogICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHMuUGFzc3dvcmQKLSAgICAgICAgICAgICAgICAgID8gYFtanDue? \ No newline at end of file From ee5d29f7092b5c24246fb49c055d7ec84607e8d2 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:00:28 -0500 Subject: [PATCH 05/17] Remove invalid native fix staging chunk --- .github/native-fix.chunk.00 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .github/native-fix.chunk.00 diff --git a/.github/native-fix.chunk.00 b/.github/native-fix.chunk.00 deleted file mode 100644 index a0fd7bea..00000000 --- a/.github/native-fix.chunk.00 +++ /dev/null @@ -1 +0,0 @@ -ZGlmZiAtLWdpdCBhL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cyBiL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cwppbmRleCAxNTdjZjU4Li43Y2RjNTlkIDEwMDY0NAotLS0gYS9jbGllbnQvZGVmaW5pdGlvbnMvZ2xvYmFsLmQudHMKKysrIGIvY2xpZW50L2RlZmluaXRpb25zL2dsb2JhbC5kLnRzCkBAIC0xMTAsMTkgKzExMCw3IEBAIHR5cGUgTW9kdWxlVHlwZSA9IHsKICAgfQogCiAgIGNsdXN0ZXI6IHsKLSAgICBvcGVuQ3JlYXRlR2FtZTogKCkgPT4gdm9pZAotICAgIHN1Ym1pdENyZWF0ZUdhbWU6IChmb3JtOiB7Ci0gICAgICB0aXRsZTogc3RyaW5nCi0gICAgICBtb2RlOiBzdHJpbmcKLSAgICAgIG1hcDogc3RyaW5nCi0gICAgICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gICAgICBwYXNzd29yZDogc3RyaW5nCi0gICAgICBib3RzOiBudW1iZXIKLSAgICAgIHNraWxsOiBudW1iZXIKLSAgICAgIGR1cmF0aW9uOiBudW1iZXIKLSAgICB9KSA9PiB2b2lkCiAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHZvaWQKLSAgICBwcm9tcHRKb2luOiAobmFtZTogc3RyaW5nKSA9PiB2b2lkCiAgICAgY29ubmVjdDogKG5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4gdm9pZAogICAgIHNlbmQ6IChjaGFubmVsOiBudW1iZXIsIGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKSA9PiB2b2lkCiAgICAgcmVjZWl2ZTogKGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aFB0cjogbnVtYmVyKSA9PiB2b2lkCmRpZmYgLS1naXQgYS9jbGllbnQvc3JjL2luZGV4LnRzeCBiL2NsaWVudC9zcmMvaW5kZXgudHN4CmluZGV4IGM5ZWE0Y2UuLjAzNGNhZGEgMTAwNjQ0Ci0tLSBhL2NsaWVudC9zcmMvaW5kZXgudHN4CisrKyBiL2NsaWVudC9zcmMvaW5kZXgudHN4CkBAIC04LDEzICs4LDExIEBAIGltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nCiBpbXBvcnQgewogICBDZW50ZXIsCiAgIENoYWtyYVByb3ZpZGVyLAotICBCdXR0b24sCiAgIGV4dGVuZFRoZW1lLAogICBGbGV4LAogICBCb3gsCiAgIFZTdGFjaywKICAgSGVhZGluZywKLSAgU3BhY2VyLAogfSBmcm9tICdAY2hha3JhLXVpL3JlYWN0JwogCiBpbXBvcnQgdHlwZSB7IFRoZW1lQ29uZmlnIH0gZnJvbSAnQGNoYWtyYS11aS9yZWFjdCcKQEAgLTk4LDY3ICs5Niw2IEBAIGNvbnN0IERyb3BUYXJnZXQgPSBzdHlsZWQuZGl2YAogICB6LWluZGV4OiAyOwogYAogCi1jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkLmRpdmAKLSAgcG9zaXRpb246IGZpeGVkOwotICBpbnNldDogMDsKLSAgei1pbmRleDogMjA7Ci0gIGRpc3BsYXk6IGZsZXg7Ci0gIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gIGp1c3RpZnktY29udGVudDogY2VudGVyOwotICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzYpOwotICBwb2ludGVyLWV2ZW50czogYXV0bzsKLWAKLQotY29uc3QgTW9kYWxDYXJkID0gc3R5bGVkLmRpdmAKLSAgd2lkdGg6IG1pbig5MnZ3LCA1MjBweCk7Ci0gIG1heC1oZWlnaHQ6IDg4dmg7Ci0gIG92ZXJmbG93LXk6IGF1dG87Ci0gIHBhZGRpbmc6IDI0cHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7Ci0gIGJvcmRlci1yYWRpdXM6IDEwcHg7Ci0gIGJhY2tncm91bmQ6ICMxMDEzMTg7Ci0gIGNvbG9yOiAjZmZmOwotICBib3gtc2hhZG93OiAwIDI0cHggODBweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwotCi0gIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMTRweCAwIDZweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogI2NiZDVlMDsgfQotICBpbnB1dCwgc2VsZWN0IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nOiAxMHB4IDEycHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzNiNDI1MDsKLSAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgYmFja2dyb3VuZDogIzE5MWUyNzsKLSAgICBjb2xvcjogI2ZmZjsKLSAgfQotICAucm93IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDEycHg7IH0KLSAgLmFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyBnYXA6IDEwcHg7IG1hcmdpbi10b3A6IDIycHg7IH0KLSAgYnV0dG9uIHsgcGFkZGluZzogMTBweCAxNnB4OyBib3JkZXItcmFkaXVzOiA2cHg7IGJvcmRlcjogMDsgY3Vyc29yOiBwb2ludGVyOyB9Ci0gIGJ1dHRvbi5wcmltYXJ5IHsgYmFja2dyb3VuZDogI2U4ZWRmNTsgY29sb3I6ICMxMTE4Mjc7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KLSAgYnV0dG9uLnNlY29uZGFyeSB7IGJhY2tncm91bmQ6ICMyYTMwM2I7IGNvbG9yOiAjZmZmOyB9Ci0gIGJ1dHRvbjpkaXNhYmxlZCB7IG9wYWNpdHk6IDAuNTU7IGN1cnNvcjogd2FpdDsgfQotYAotCi10eXBlIENyZWF0ZUdhbWVGb3JtID0gewotICB0aXRsZTogc3RyaW5nCi0gIG1vZGU6IHN0cmluZwotICBtYXA6IHN0cmluZwotICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gIHBhc3N3b3JkOiBzdHJpbmcKLSAgYm90czogbnVtYmVyCi0gIHNraWxsOiBudW1iZXIKLSAgZHVyYXRpb246IG51bWJlcgotfQotCi1jb25zdCBERUZBVUxUX0NSRUFURV9GT1JNOiBDcmVhdGVHYW1lRm9ybSA9IHsKLSAgdGl0bGU6ICdDdXN0b20gTWF0Y2gnLAotICBtb2RlOiAnZmZhJywKLSAgbWFwOiAnY29tcGxleCcsCi0gIHZpc2liaWxpdHk6ICd1bmxpc3RlZCcsCi0gIHBhc3N3b3JkOiAnJywKLSAgYm90czogMCwKLSAgc2tpbGw6IDcwLAotICBkdXJhdGlvbjogMzAwLAotfQotCiBjb25zdCBlbmNvZGVDb21tYW5kVmFsdWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7CiAgIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKQogICBsZXQgYmluYXJ5ID0gJycKQEAgLTMwMyw5ICsyNDAsNiBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgfSwKICAgfSkKIAotICBjb25zdCBbY3JlYXRlR2FtZU9wZW4sIHNldENyZWF0ZUdhbWVPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlR2FtZUJ1c3ksIHNldENyZWF0ZUdhbWVCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlRm9ybSwgc2V0Q3JlYXRlRm9ybV0gPSBSZWFjdC51c2VTdGF0ZTxDcmVhdGVHYW1lRm9ybT4oREVGQVVMVF9DUkVBVEVfRk9STSkKIAogICBjb25zdCBpbnRlcm5hbFNlcnZlcnNSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPihgbmV3Z3VpIGludGVncmF0ZWQgWwogICAgICAgICBndWl0YWIgInNlcnZlcnMiCkBAIC01MTcsNiArNDUxLDIwOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgLy8gICAke3JlbmRlckRpc2NvcmRCdXR0b24oYXV0aFN0YXRlKX0KIAogICAgIGNvbnN0IG1lbnUgPSBgCisgICAgLy8gTmF0aXZlIFNhdWVyYnJhdGVuIGN1c3RvbS1nYW1lIG1lbnVzLiBUaGVzZSBkZWxpYmVyYXRlbHkgbGl2ZSBpbnNpZGUgdGhlCisgICAgLy8gZW5naW5lIEdVSSBzbyBjdXJzb3IgbG9ja2luZywga2V5Ym9hcmQgZm9jdXMsIEVTQywgYW5kIHN0eWxpbmcgYWxsIGJlaGF2ZQorICAgIC8vIGV4YWN0bHkgbGlrZSB0aGUgcmVzdCBvZiB0aGUgZ2FtZS4KKyAgICBjZ19tb2RlID0gImZmYSIKKyAgICBjZ19tb2RlX2xhYmVsID0gIkZyZWUgRm9yIEFsbCIKKyAgICBjZ19tYXAgPSAiY29tcGxleCIKKyAgICBjZ192aXNpYmlsaXR5ID0gMgorICAgIGNnX3Bhc3N3b3JkID0gIiIKKyAgICBjZ19ib3RzID0gMAorICAgIGNnX3NraWxsID0gNzAKKyAgICBjZ19kdXJhdGlvbiA9IDMwMAorICAgIGNnX2pvaW5fdGFyZ2V0ID0gIiIKKyAgICBjZ19qb2luX3Bhc3N3b3JkID0gIiIKKworICAgIGNnc2VsZWN0bWFwID0gWworICAgICAgICBjZ19tYXAgPSAkYXJnMQorICAgICAgICBzaG93Z3VpIGN1c3RvbWdhbWUKKyAgICBdCisKKyAgICBnZW5jZ21hcGl0ZW1zID0gWworICAgICAgICBsb29wbGlzdCBjdXJtYXAgJGFyZzEgWworICAgICAgICAgICAgZ3VpYnV0dG9uICRjdXJtYXAgKGNvbmNhdHdvcmQgImNnc2VsZWN0bWFwICIgJGN1cm1hcCkgImN1YmUiCisgICAgICAgIF0KKyAgICBdCisKKyAgICBidWlsZGNnY3VzdG9tbWFwcyA9IFsKKyAgICAgICAgY2djdXN0b21tYXBzID0gIiIKKyAgICAgICAgbG9vcGZpbGVzIGN1cm1hcCAicGFja2FnZXMvYmFzZSIgIm9neiIgWworICAgICAgICAgICAgaWYgKDwgKGluZGV4b2YgJGFsbG1hcHMgJGN1cm1hcCkgMCkgWworICAgICAgICAgICAgICAgIGNnY3VzdG9tbWFwcyA9IChjb25jYXQgJGNnY3VzdG9tbWFwcyAoZXNjYXBlICRjdXJtYXApKQorICAgICAgICAgICAgXQorICAgICAgICBdCisgICAgICAgIGNnY3VzdG9tbWFwcyA9IChzb3J0bGlzdCAkY2djdXN0b21tYXBzIHggeSBbbmF0dXJhbHNvcnQgJHggJHldKQorICAgIF0KKworICAgIGNnY3JlYXRlID0gWworICAgICAgICBpZiAoJiYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgKDwgKHN0cmxlbiAkY2dfcGFzc3dvcmQpIDMpKSBbCisgICAgICAgICAgICBlY2hvICJeZjNQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycy4iCisgICAgICAgIF0gWworICAgICAgICAgICAgY2xlYXJndWkgMQorICAgICAgICAgICAgY3JlYXRlZ2FtZSAoY29uY2F0d29yZCAkY2dfbW9kZSAifCIgJGNnX21hcCAifCIgJGNnX3Zpc2liaWxpdHkgInwiICRjZ19wYXNzd29yZCAifCIgJGNnX2JvdHMgInwiICRjZ19za2lsbCAifCIgJGNnX2R1cmF0aW9uKSAiIgorICAgICAgICBdCisgICAgXQorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWUgWworICAgICAgICBndWl0ZXh0ICJDcmVhdGUgQ3VzdG9tIEdhbWUiIDAKKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTW9kZSIgMAorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAoY29uY2F0d29yZCAiICAiICRjZ19tb2RlX2xhYmVsKSBbc2hvd2d1aSBjdXN0b21nYW1lbW9kZV0gImN1YmUiCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTWFwIiAwCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uIChjb25jYXR3b3JkICIgICIgJGNnX21hcCkgW2J1aWxkY2djdXN0b21tYXBzOyBzaG93Z3VpIGN1c3RvbWdhbWVtYXBzXSAiY3ViZSIKKyAgICAgICAgICAgICAgICBndWl0ZXh0ICJWaXNpYmlsaXR5IiAwCisgICAgICAgICAgICAgICAgZ3VpcmFkaW8gIlB1YmxpYyAtIGxpc3RlZCBmb3IgZXZlcnlvbmUiIGNnX3Zpc2liaWxpdHkgMAorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJQYXNzd29yZCBwcm90ZWN0ZWQgLSBsaXN0ZWQgd2l0aCBhIGxvY2siIGNnX3Zpc2liaWxpdHkgMQorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJVbmxpc3RlZCAtIGpvaW4gYnkgVVJMIG9yIHJvb20gY29kZSIgY2dfdmlzaWJpbGl0eSAyCisgICAgICAgICAgICAgICAgaWYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgWworICAgICAgICAgICAgICAgICAgICBndWl0ZXh0ICJQYXNzd29yZCIgMAorICAgICAgICAgICAgICAgICAgICBndWlmaWVsZCBjZ19wYXNzd29yZCAyOAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiQm90czogIiAkY2dfYm90cykgMAorICAgICAgICAgICAgICAgIGd1aXNsaWRlciBjZ19ib3RzIDAgMTIKKyAgICAgICAgICAgICAgICBndWl0ZXh0IChjb25jYXR3b3JkICJCb3Qgc2tpbGw6ICIgJGNnX3NraWxsKSAwCisgICAgICAgICAgICAgICAgZ3Vpc2xpZGVyIGNnX3NraWxsIDEgMTAxCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiUm91bmQgbGVuZ3RoOiAiICRjZ19kdXJhdGlvbiAiIHNlY29uZHMiKSAwCisgICAgICAgICAgICAgICAgZ3Vpc2xpZGVyIGNnX2R1cmF0aW9uIDE4MCA5MDAKKyAgICAgICAgICAgICAgICBndWlzdHJ1dCAxCisgICAgICAgICAgICAgICAgZ3VpaW1hZ2UgKGNvbmNhdHdvcmQgInBhY2thZ2VzL2Jhc2UvIiAkY2dfbWFwICIuanBnIikgW10gNCAxICJkYXRhL2N1YmUucG5nIiAkY2dfbWFwCisgICAgICAgICAgICBdCisgICAgICAgIF0KKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpYnV0dG9uICJDcmVhdGUgZ2FtZSIgW2NnY3JlYXRlXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gImN1c3RvbSBnYW1lIgorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWVtb2RlIFsKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkZyZWUgRm9yIEFsbCIgW2NnX21vZGUgPSAiZmZhIjsgY2dfbW9kZV9sYWJlbCA9ICJGcmVlIEZvciBBbGwiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJUZWFtcGxheSIgW2NnX21vZGUgPSAidGVhbXBsYXkiOyBjZ19tb2RlX2xhYmVsID0gIlRlYW1wbGF5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiSW5zdGFnaWIiIFtjZ19tb2RlID0gImluc3RhIjsgY2dfbW9kZV9sYWJlbCA9ICJJbnN0YWdpYiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIFRlYW0iIFtjZ19tb2RlID0gImluc3RhdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiSW5zdGFnaWIgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkVmZmljaWVuY3kiIFtjZ19tb2RlID0gImVmZmljIjsgY2dfbW9kZV9sYWJlbCA9ICJFZmZpY2llbmN5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiRWZmaWNpZW5jeSBUZWFtIiBbY2dfbW9kZSA9ICJlZmZpY3RlYW0iOyBjZ19tb2RlX2xhYmVsID0gIkVmZmljaWVuY3kgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MiIFtjZ19tb2RlID0gInRhYyI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MgVGVhbSIgW2NnX21vZGUgPSAidGFjdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyBUZWFtIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgXQorICAgICAgICAgICAgZ3VpYmFyCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkNhcHR1cmUiIFtjZ19tb2RlID0gImNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIkNhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJSZWdlbiBDYXB0dXJlIiBbY2dfbW9kZSA9ICJyZWdlbmNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIlJlZ2VuIENhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJDVEYiIFtjZ19tb2RlID0gImN0ZiI7IGNnX21vZGVfbGFiZWwgPSAiQ2FwdHVyZSBUaGUgRmxhZyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIENURiIgW2NnX21vZGUgPSAiaW5zdGFjdGYiOyBjZ19tb2RlX2xhYmVsID0gIkluc3RhZ2liIENURiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlByb3RlY3QiIFtjZ19tb2RlID0gInByb3RlY3QiOyBjZ19tb2RlX2xhYmVsID0gIlByb3RlY3QiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJIb2xkIiBbY2dfbW9kZSA9ICJob2xkIjsgY2dfbW9kZV9sYWJlbCA9ICJIb2xkIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiQ29sbGVjdCIgW2NnX21vZGUgPSAiY29sbGVjdCI7IGNnX21vZGVfbGFiZWwgPSAiQ29sbGVjdCI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgIF0KKyAgICAgICAgXQorICAgIF0gImdhbWUgbW9kZSIKKworICAgIG5ld2d1aSBjdXN0b21nYW1lbWFwcyBbCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzOF0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHM5XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDQiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczEwXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczExXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImNhcHR1cmUgMSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczJdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczNdCisgICAgICAgIF0KKyAgICAgICAgZ3VpdGFiICJjYXB0dXJlIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM0XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM1XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY2FwdHVyZSAzIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNhcHR1cmVtYXBzN10KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDEiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgIm90aGVyIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNvbmNlcHRtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkc3BtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkcnBnbWFwc10KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImN1c3RvbSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjZ2N1c3RvbW1hcHNdCisgICAgICAgIF0KKyAgICBdICJjaG9vc2UgbWFwIgorCisgICAgbmV3Z3VpIGpvaW5wYXNzd29yZCBbCisgICAgICAgIGd1aXRleHQgKGNvbmNhdHdvcmQgIlBhc3N3b3JkIHJlcXVpcmVkIGZvciAiICRjZ19qb2luX3RhcmdldCkgMAorICAgICAgICBndWlmaWVsZCBjZ19qb2luX3Bhc3N3b3JkIDI4CisgICAgICAgIGd1aWJhcgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aWJ1dHRvbiAiSm9pbiIgW2NsZWFyZ3VpIDE7IGpvaW4gJGNnX2pvaW5fdGFyZ2V0ICRjZ19qb2luX3Bhc3N3b3JkXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gInBhc3N3b3JkIgorCiAgICAgbmV3Z3VpIGNvbnRlbnQgWwogICAgICAgICBndWlidXR0b24gIm1vZHMuLiIgICJzaG93Z3VpIG1vZHMiCiAgICAgICAgIGd1aWJ1dHRvbiAicHV0IG1vZHMgaW4gdXJsLi4iICBbanMgIk1vZHVsZS5hc3NldHMubW9kc1RvVVJMKCkiXQpAQCAtNTUzLDcgKzY4OSw3IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICAgICAgICBndWliYXIKICAgICAgIF0KICAgICAgIGd1aWJ1dHRvbiAic2VydmVyIGJyb3dzZXIuLiIgInNob3dndWkgaW50ZWdyYXRlZCIKLSAgICAgIGd1aWJ1dHRvbiAiY3JlYXRlIGN1c3RvbSBnYW1lLi4uIiBbanMgIk1vZHVsZS5jbHVzdGVyLm9wZW5DcmVhdGVHYW1lKCkiXQorICAgICAgZ3VpYnV0dG9uICJjcmVhdGUgY3VzdG9tIGdhbWUuLi4iIFtzaG93Z3VpIGN1c3RvbWdhbWVdCiAgICAgICBndWlidXR0b24gInJhbmRvbSBtYXAuLiIgICJtYXAgcmFuZG9tIgogICAgICAgZ3VpYnV0dG9uICJjb250ZW50Li4iICJzaG93Z3VpIGNvbnRlbnQiCiAgICAgICBpZiAoJGZ1bGxzY3JlZW4pIFsKQEAgLTg2MSw0NyArOTk3LDU1IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICB9CiAKICAgICBNb2R1bGUuY2x1c3RlciA9IHsKLSAgICAgIG9wZW5DcmVhdGVHYW1lOiAoKSA9PiB7Ci0gICAgICAgIHNldENyZWF0ZUZvcm0oREVGQVVMVF9DUkVBVEVfRk9STSkKLSAgICAgICAgc2V0Q3JlYXRlR2FtZU9wZW4odHJ1ZSkKLSAgICAgIH0sCi0gICAgICBzdWJtaXRDcmVhdGVHYW1lOiAoZm9ybTogQ3JlYXRlR2FtZUZvcm0pID0+IHsKKyAgICAgIGNyZWF0ZUdhbWU6IChwcmVzZXQ6IHN0cmluZywgbW9kZTogc3RyaW5nKSA9PiB7CiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewotICAgICAgICAgIHNldENyZWF0ZUdhbWVCdXN5KHRydWUpCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChmb3JtLnZpc2liaWxpdHkgPT09ICdwYXNzd29yZCcgJiYgZm9ybS5wYXNzd29yZC50cmltKCkubGVuZ3RoIDwgMykgeworICAgICAgICAgICAgbGV0IGdhbWVNb2RlID0gbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScKKyAgICAgICAgICAgIGxldCBtYXAgPSAnY29tcGxleCcKKyAgICAgICAgICAgIGxldCB2aXNpYmlsaXR5ID0gJ3VubGlzdGVkJworICAgICAgICAgICAgbGV0IHBhc3N3b3JkID0gJycKKyAgICAgICAgICAgIGxldCBib3RzID0gMAorICAgICAgICAgICAgbGV0IHNraWxsID0gNzAKKyAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IDMwMAorCisgICAgICAgICAgICAvLyBOYXRpdmUgQ3ViZVNjcmlwdCBHVUkgc2VuZHMgb25lIGNvbXBhY3Qgc3BlYyB0aHJvdWdoIHRoZSBleGlzdGluZworICAgICAgICAgICAgLy8gZW5naW5lIGNyZWF0ZWdhbWUgY29tbWFuZC4gUGFyc2UgdmFsdWVzIGZyb20gdGhlIGVuZCBzbyBwYXNzd29yZHMKKyAgICAgICAgICAgIC8vIG1heSBjb250YWluIHRoZSBkZWxpbWl0ZXIgd2l0aG91dCBjb3JydXB0aW5nIHRoZSByZW1haW5pbmcgZmllbGRzLgorICAgICAgICAgICAgaWYgKHByZXNldC5pbmNsdWRlcygnfCcpKSB7CisgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gcHJlc2V0LnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgZ2FtZU1vZGUgPSBwYXJ0cy5zaGlmdCgpIHx8ICdmZmEnCisgICAgICAgICAgICAgIG1hcCA9IHBhcnRzLnNoaWZ0KCkgfHwgJ2NvbXBsZXgnCisgICAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlDb2RlID0gcGFydHMuc2hpZnQoKSB8fCAnMicKKyAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9IHZpc2liaWxpdHlDb2RlID09PSAnMCcgPyAncHVibGljJyA6IHZpc2liaWxpdHlDb2RlID09PSAnMScgPyAncGFzc3dvcmQnIDogJ3VubGlzdGVkJworICAgICAgICAgICAgICBkdXJhdGlvbiA9IE51bWJlcihwYXJ0cy5wb3AoKSB8fCAzMDApCisgICAgICAgICAgICAgIHNraWxsID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDcwKQorICAgICAgICAgICAgICBib3RzID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDApCisgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFydHMuam9pbignfCcpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2aXNpYmlsaXR5ID09PSAncGFzc3dvcmQnICYmIHBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuJykKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBgJHtnYW1lTW9kZX0gb24gJHttYXB9YAogICAgICAgICAgICAgY29uc3QgYXJncyA9IFsKICAgICAgICAgICAgICAgJ2NyZWF0ZWdhbWUnLAotICAgICAgICAgICAgICBmb3JtLm1vZGUsCi0gICAgICAgICAgICAgIGZvcm0ubWFwLAotICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke2Zvcm0udmlzaWJpbGl0eX1gLAotICAgICAgICAgICAgICBgcGFzc3dvcmQ9JHtlbmNvZGVDb21tYW5kVmFsdWUoZm9ybS5wYXNzd29yZCl9YCwKLSAgICAgICAgICAgICAgYGJvdHM9JHtmb3JtLmJvdHN9YCwKLSAgICAgICAgICAgICAgYHNraWxsPSR7Zm9ybS5za2lsbH1gLAotICAgICAgICAgICAgICBgZHVyYXRpb249JHtmb3JtLmR1cmF0aW9ufWAsCi0gICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZShmb3JtLnRpdGxlKX1gLAorICAgICAgICAgICAgICBnYW1lTW9kZSwKKyAgICAgICAgICAgICAgbWFwLAorICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke3Zpc2liaWxpdHl9YCwKKyAgICAgICAgICAgICAgYHBhc3N3b3JkPSR7ZW5jb2RlQ29tbWFuZFZhbHVlKHBhc3N3b3JkKX1gLAorICAgICAgICAgICAgICBgYm90cz0ke01hdGgubWF4KDAsIE1hdGgubWluKDEyLCBNYXRoLnRydW5jKGJvdHMpKSl9YCwKKyAgICAgICAgICAgICAgYHNraWxsPSR7TWF0aC5tYXgoMSwgTWF0aC5taW4oMTAxLCBNYXRoLnRydW5jKHNraWxsKSkpfWAsCisgICAgICAgICAgICAgIGBkdXJhdGlvbj0ke01hdGgubWF4KDE4MCwgTWF0aC5taW4oOTAwLCBNYXRoLnRydW5jKGR1cmF0aW9uKSkpfWAsCisgICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZSh0aXRsZSl9YCwKICAgICAgICAgICAgIF0KICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoYXJncy5qb2luKCcgJykpCi0gICAgICAgICAgICBzZXRDcmVhdGVHYW1lT3BlbihmYWxzZSkKICAgICAgICAgICAgIGxvZy5zdWNjZXNzKCdjdXN0b20gZ2FtZSBjcmVhdGVkOyBzaGFyZSB0aGUgVVJMIG9yIHJvb20gY29kZSB3aXRoIGZyaWVuZHMnKQogICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgIGxvZy5lcnJvcihgZmFpbGVkIHRvIGNyZWF0ZSBnYW1lOiAke2V9YCkKLSAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgc2V0Q3JlYXRlR2FtZUJ1c3koZmFsc2UpCiAgICAgICAgICAgfQogICAgICAgICB9KSgpCiAgICAgICB9LAotICAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHsKLSAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uREVGQVVMVF9DUkVBVEVfRk9STSwgbW9kZTogbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScgfQotICAgICAgICBNb2R1bGUuY2x1c3Rlci5zdWJtaXRDcmVhdGVHYW1lKG5leHQpCi0gICAgICB9LAotICAgICAgcHJvbXB0Sm9pbjogKG5hbWU6IHN0cmluZykgPT4gewotICAgICAgICBjb25zdCBwYXNzd29yZCA9IHdpbmRvdy5wcm9tcHQoYFBhc3N3b3JkIGZvciAke25hbWV9OmApCi0gICAgICAgIGlmIChwYXNzd29yZCA9PSBudWxsKSByZXR1cm4KLSAgICAgICAgTW9kdWxlLmNsdXN0ZXIuY29ubmVjdChuYW1lLCBwYXNzd29yZCkKLSAgICAgIH0sCiAgICAgICBjb25uZWN0OiAobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiB7CiAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5hbWUubGVuZ3RoID09PSAwID8gJ2ZmYScgOiBuYW1lCiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewpAQCAtOTExLDcgKzEwNTUsOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlKQogICAgICAgICAgICAgaWYgKCFwYXNzd29yICYmIG1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaW5jb3JyZWN0IHBhc3N3b3JkJykpIHsKLSAgICAgICAgICAgICAgTW9kdWxlLmNsdXN0ZXIucHJvbXB0Sm9pbih0YXJnZXQpCisgICAgICAgICAgICAgIGNvbnN0IHNhZmVUYXJnZXQgPSB0YXJnZXQucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgJycpCisgICAgICAgICAgICAgIEJhbmFuYUJyZWFkLmV4ZWN1dGUoYGNnX2pvaW5fdGFyZ2V0ID0gIiR7c2FmZVRhcmdldH0iOyBjZ19qb2luX3Bhc3N3b3JkID0gIiI7IHNob3dndWkgam9pbnBhc3N3b3JkYCkKICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb2cuZXJyb3IoYGZhaWxlZCB0byBqb2luICR7dGFyZ2V0fTogJHtlfWApCkBAIC0xMDI2LDcgKzExNzEsNyBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgYm90cyA9IHMuQm90cyA+IDAgPyBgLCAke3MuQm90c30gYm90JHtzLkJvdHMgPT09IDEgPyAnJyA6ICdzJ31gIDogJycKICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGAke2xvY2t9JHtjdXN0b219JHtzLkFsaWFzfSAoXmYyJHtzLk51bUNsaWVudHN9IHBsYXllciR7cy5OdW1DbGllbnRzID09PSAxID8gJycgOiAncyd9JHtib3RzfV5mNykgLSAke21vZGVOYW1lKHMuTW9kZSl9ICR7cy5NYXB9YAogICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHMuUGFzc3dvcmQKLSAgICAgICAgICAgICAgICAgID8gYFtanDue? \ No newline at end of file From f915a4692e4662f6250d587873a83fbf22e5f8ef Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:01:45 -0500 Subject: [PATCH 06/17] Stage verified native fix chunk 1/8 --- .github/native-small.00 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.00 diff --git a/.github/native-small.00 b/.github/native-small.00 new file mode 100644 index 00000000..980393c2 --- /dev/null +++ b/.github/native-small.00 @@ -0,0 +1 @@ +ZGlmZiAtLWdpdCBhL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cyBiL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cwppbmRleCAxNTdjZjU4Li43Y2RjNTlkIDEwMDY0NAotLS0gYS9jbGllbnQvZGVmaW5pdGlvbnMvZ2xvYmFsLmQudHMKKysrIGIvY2xpZW50L2RlZmluaXRpb25zL2dsb2JhbC5kLnRzCkBAIC0xMTAsMTkgKzExMCw3IEBAIHR5cGUgTW9kdWxlVHlwZSA9IHsKICAgfQogCiAgIGNsdXN0ZXI6IHsKLSAgICBvcGVuQ3JlYXRlR2FtZTogKCkgPT4gdm9pZAotICAgIHN1Ym1pdENyZWF0ZUdhbWU6IChmb3JtOiB7Ci0gICAgICB0aXRsZTogc3RyaW5nCi0gICAgICBtb2RlOiBzdHJpbmcKLSAgICAgIG1hcDogc3RyaW5nCi0gICAgICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gICAgICBwYXNzd29yZDogc3RyaW5nCi0gICAgICBib3RzOiBudW1iZXIKLSAgICAgIHNraWxsOiBudW1iZXIKLSAgICAgIGR1cmF0aW9uOiBudW1iZXIKLSAgICB9KSA9PiB2b2lkCiAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHZvaWQKLSAgICBwcm9tcHRKb2luOiAobmFtZTogc3RyaW5nKSA9PiB2b2lkCiAgICAgY29ubmVjdDogKG5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4gdm9pZAogICAgIHNlbmQ6IChjaGFubmVsOiBudW1iZXIsIGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKSA9PiB2b2lkCiAgICAgcmVjZWl2ZTogKGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aFB0cjogbnVtYmVyKSA9PiB2b2lkCmRpZmYgLS1naXQgYS9jbGllbnQvc3JjL2luZGV4LnRzeCBiL2NsaWVudC9zcmMvaW5kZXgudHN4CmluZGV4IGM5ZWE0Y2UuLjAzNGNhZGEgMTAwNjQ0Ci0tLSBhL2NsaWVudC9zcmMvaW5kZXgudHN4CisrKyBiL2NsaWVudC9zcmMvaW5kZXgudHN4CkBAIC04LDEzICs4LDExIEBAIGltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nCiBpbXBvcnQgewogICBDZW50ZXIsCiAgIENoYWtyYVByb3ZpZGVyLAotICBCdXR0b24sCiAgIGV4dGVuZFRoZW1lLAogICBGbGV4LAogICBCb3gsCiAgIFZTdGFjaywKICAgSGVhZGluZywKLSAgU3BhY2VyLAogfSBmcm9tICdAY2hha3JhLXVpL3JlYWN0JwogCiBpbXBvcnQgdHlwZSB7IFRoZW1lQ29uZmlnIH0gZnJvbSAnQGNoYWtyYS11aS9yZWFjdCcKQEAgLTk4LDY3ICs5Niw2IEBAIGNvbnN0IERyb3BUYXJnZXQgPSBzdHlsZWQuZGl2YAogICB6LWluZGV4OiAyOwogYAogCi1jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkLmRpdmAKLSAgcG9zaXRpb246IGZpeGVkOwotICBpbnNldDogMDsKLSAgei1pbmRleDogMjA7Ci0gIGRpc3BsYXk6IGZsZXg7Ci0gIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gIGp1c3RpZnktY29udGVudDogY2VudGVyOwotICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzYpOwotICBwb2ludGVyLWV2ZW50czogYXV0bzsKLWAKLQotY29uc3QgTW9kYWxDYXJkID0gc3R5bGVkLmRpdmAKLSAgd2lkdGg6IG1pbig5MnZ3LCA1MjBweCk7Ci0gIG1heC1oZWlnaHQ6IDg4dmg7Ci0gIG92ZXJmbG93LXk6IGF1dG87Ci0gIHBhZGRpbmc6IDI0cHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7Ci0gIGJvcmRlci1yYWRpdXM6IDEwcHg7Ci0gIGJhY2tncm91bmQ6ICMxMDEzMTg7Ci0gIGNvbG9yOiAjZmZmOwotICBib3gtc2hhZG93OiAwIDI0cHggODBweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwotCi0gIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMTRweCAwIDZweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogI2NiZDVlMDsgfQotICBpbnB1dCwgc2VsZWN0IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nOiAxMHB4IDEycHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzNiNDI1MDsKLSAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgYmFja2dyb3VuZDogIzE5MWUyNzsKLSAgICBjb2xvcjogI2ZmZjsKLSAgfQotICAucm93IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDEycHg7IH0KLSAgLmFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyBnYXA6IDEwcHg7IG1hcmdpbi10b3A6IDIycHg7IH0KLSAgYnV0dG9uIHsgcGFkZGluZzogMTBweCAxNnB4OyBib3JkZXItcmFkaXVzOiA2cHg7IGJvcmRlcjogMDsgY3Vyc29yOiBwb2ludGVyOyB9Ci0gIGJ1dHRvbi5wcmltYXJ5IHsgYmFja2dyb3VuZDogI2U4ZWRmNTsgY29sb3I6ICMxMTE4Mjc7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KLSAgYnV0dG9uLnNlY29uZGFyeSB7IGJhY2tncm91bmQ6ICMyYTMwM2I7IGNvbG9yOiAjZmZmOyB9Ci0gIGJ1dHRvbjpkaXNhYmxlZCB7IG9wYWNpdHk6IDAuNTU7IGN1cnNvcjogd2FpdDsgfQotYAotCi10eXBlIENyZWF0ZUdhbWVGb3JtID0gewotICB0aXRsZTogc3RyaW5nCi0gIG1vZGU6IHN0cmluZwotICBtYXA6IHN0cmluZwotICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gIHBhc3N3b3JkOiBzdHJpbmcKLSAgYm90czogbnVtYmVyCi0gIHNraWxsOiBudW1iZXIKLSAgZHVyYXRpb246IG51bWJlcgotfQotCi1jb25zdCBERUZBVUxUX0NSRUFURV9GT1JNOiBDcmVhdGVHYW1lRm9ybSA9IHsKLSAgdGl0bGU6ICdDdXN0b20gTWF0Y2gnLAotICBtb2RlOiAnZmZhJywKLSAgbWFwOiAnY29tcGxleCcsCi0gIHZpc2liaWxpdHk6ICd1bmxpc3RlZCcsCi0gIHBhc3N3b3JkOiAnJywKLSAgYm90czogMCwKLSAgc2tpbGw6IDcwLAotICBkdXJhdGlvbjogMzAwLAotfQotCiBjb25zdCBlbmNvZGVDb21tYW5kVmFsdWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7CiAgIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKQogICBsZXQgYmluYXJ5ID0gJycKQEAgLTMwMyw5ICsyNDAs \ No newline at end of file From df4e70848e95cf3d7806e5454d38a760b925778b Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:02:42 -0500 Subject: [PATCH 07/17] Stage verified native fix chunk 2/8 --- .github/native-small.01 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.01 diff --git a/.github/native-small.01 b/.github/native-small.01 new file mode 100644 index 00000000..a39e3a4e --- /dev/null +++ b/.github/native-small.01 @@ -0,0 +1 @@ +NiBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgfSwKICAgfSkKIAotICBjb25zdCBbY3JlYXRlR2FtZU9wZW4sIHNldENyZWF0ZUdhbWVPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlR2FtZUJ1c3ksIHNldENyZWF0ZUdhbWVCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlRm9ybSwgc2V0Q3JlYXRlRm9ybV0gPSBSZWFjdC51c2VTdGF0ZTxDcmVhdGVHYW1lRm9ybT4oREVGQVVMVF9DUkVBVEVfRk9STSkKIAogICBjb25zdCBpbnRlcm5hbFNlcnZlcnNSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPihgbmV3Z3VpIGludGVncmF0ZWQgWwogICAgICAgICBndWl0YWIgInNlcnZlcnMiCkBAIC01MTcsNiArNDUxLDIwOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgLy8gICAke3JlbmRlckRpc2NvcmRCdXR0b24oYXV0aFN0YXRlKX0KIAogICAgIGNvbnN0IG1lbnUgPSBgCisgICAgLy8gTmF0aXZlIFNhdWVyYnJhdGVuIGN1c3RvbS1nYW1lIG1lbnVzLiBUaGVzZSBkZWxpYmVyYXRlbHkgbGl2ZSBpbnNpZGUgdGhlCisgICAgLy8gZW5naW5lIEdVSSBzbyBjdXJzb3IgbG9ja2luZywga2V5Ym9hcmQgZm9jdXMsIEVTQywgYW5kIHN0eWxpbmcgYWxsIGJlaGF2ZQorICAgIC8vIGV4YWN0bHkgbGlrZSB0aGUgcmVzdCBvZiB0aGUgZ2FtZS4KKyAgICBjZ19tb2RlID0gImZmYSIKKyAgICBjZ19tb2RlX2xhYmVsID0gIkZyZWUgRm9yIEFsbCIKKyAgICBjZ19tYXAgPSAiY29tcGxleCIKKyAgICBjZ192aXNpYmlsaXR5ID0gMgorICAgIGNnX3Bhc3N3b3JkID0gIiIKKyAgICBjZ19ib3RzID0gMAorICAgIGNnX3NraWxsID0gNzAKKyAgICBjZ19kdXJhdGlvbiA9IDMwMAorICAgIGNnX2pvaW5fdGFyZ2V0ID0gIiIKKyAgICBjZ19qb2luX3Bhc3N3b3JkID0gIiIKKworICAgIGNnc2VsZWN0bWFwID0gWworICAgICAgICBjZ19tYXAgPSAkYXJnMQorICAgICAgICBzaG93Z3VpIGN1c3RvbWdhbWUKKyAgICBdCisKKyAgICBnZW5jZ21hcGl0ZW1zID0gWworICAgICAgICBsb29wbGlzdCBjdXJtYXAgJGFyZzEgWworICAgICAgICAgICAgZ3VpYnV0dG9uICRjdXJtYXAgKGNvbmNhdHdvcmQgImNnc2VsZWN0bWFwICIgJGN1cm1hcCkgImN1YmUiCisgICAgICAgIF0KKyAgICBdCisKKyAgICBidWlsZGNnY3VzdG9tbWFwcyA9IFsKKyAgICAgICAgY2djdXN0b21tYXBzID0gIiIKKyAgICAgICAgbG9vcGZpbGVzIGN1cm1hcCAicGFja2FnZXMvYmFzZSIgIm9neiIgWworICAgICAgICAgICAgaWYgKDwgKGluZGV4b2YgJGFsbG1hcHMgJGN1cm1hcCkgMCkgWworICAgICAgICAgICAgICAgIGNnY3VzdG9tbWFwcyA9IChjb25jYXQgJGNnY3VzdG9tbWFwcyAoZXNjYXBlICRjdXJtYXApKQorICAgICAgICAgICAgXQorICAgICAgICBdCisgICAgICAgIGNnY3VzdG9tbWFwcyA9IChzb3J0bGlzdCAkY2djdXN0b21tYXBzIHggeSBbbmF0dXJhbHNvcnQgJHggJHldKQorICAgIF0KKworICAgIGNnY3JlYXRlID0gWworICAgICAgICBpZiAoJiYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgKDwgKHN0cmxlbiAkY2dfcGFzc3dvcmQpIDMpKSBbCisgICAgICAgICAgICBlY2hvICJeZjNQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycy4iCisgICAgICAgIF0gWworICAgICAgICAgICAgY2xlYXJndWkgMQorICAgICAgICAgICAgY3JlYXRlZ2FtZSAoY29uY2F0d29yZCAkY2dfbW9kZSAifCIgJGNnX21hcCAifCIgJGNnX3Zpc2liaWxpdHkgInwiICRjZ19wYXNzd29yZCAifCIgJGNnX2JvdHMgInwiICRjZ19za2lsbCAifCIgJGNnX2R1cmF0aW9uKSAiIgorICAgICAgICBdCisgICAgXQorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWUgWworICAgICAgICBndWl0ZXh0ICJDcmVhdGUgQ3VzdG9tIEdhbWUiIDAKKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTW9kZSIgMAorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAoY29uY2F0d29yZCAiICAiICRjZ19tb2RlX2xhYmVsKSBbc2hvd2d1aSBjdXN0b21nYW1lbW9kZV0gImN1YmUiCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTWFwIiAwCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uIChjb25jYXR3b3JkICIgICIgJGNnX21hcCkgW2J1aWxkY2djdXN0b21tYXBzOyBzaG93Z3VpIGN1c3RvbWdhbWVtYXBzXSAiY3ViZSIKKyAgICAgICAgICAgICAgICBndWl0ZXh0ICJWaXNpYmlsaXR5IiAwCisgICAgICAgICAgICAgICAgZ3VpcmFkaW8gIlB1YmxpYyAtIGxpc3RlZCBmb3IgZXZlcnlvbmUiIGNnX3Zpc2liaWxpdHkgMAorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJQYXNzd29yZCBwcm90ZWN0ZWQgLSBsaXN0ZWQgd2l0aCBhIGxvY2siIGNnX3Zpc2liaWxpdHkgMQorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJVbmxpc3RlZCAtIGpvaW4gYnkgVVJMIG9yIHJvb20gY29kZSIgY2dfdmlzaWJpbGl0eSAyCisgICAgICAgICAgICAgICAgaWYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgWworICAgICAgICAgICAgICAgICAgICBndWl0ZXh0ICJQYXNzd29yZCIgMAorICAgICAgICAgICAgICAgICAgICBndWlmaWVsZCBjZ19wYXNzd29yZCAyOAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiQm90czogIiAkY2dfYm90cykgMAorICAgICAgICAgICAgICAgIGd1aXNsaWRlciBjZ19ib3RzIDAgMTIKKyAgICAgICAgICAgICAgICBndWl0ZXh0IChjb25jYXR3b3JkICJCb3Qgc2tpbGw6ICIgJGNnX3NraWxsKSAwCisgICAgICAgICAgICAgICAgZ3Vpc2xpZGVyIGNnX3NraWxsIDEgMTAxCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiUm91bmQgbGVuZ3RoOiAiICRjZ19kdXJhdGlvbiAiIHNlY29uZHMiKSAwCisgICAgICAgICAgICAg \ No newline at end of file From 092f8697c2a0a0bd35a100d521d1514f111e2596 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:03:42 -0500 Subject: [PATCH 08/17] Stage verified native fix chunk 3/8 --- .github/native-small.02 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.02 diff --git a/.github/native-small.02 b/.github/native-small.02 new file mode 100644 index 00000000..1de049f0 --- /dev/null +++ b/.github/native-small.02 @@ -0,0 +1 @@ +ICAgZ3Vpc2xpZGVyIGNnX2R1cmF0aW9uIDE4MCA5MDAKKyAgICAgICAgICAgICAgICBndWlzdHJ1dCAxCisgICAgICAgICAgICAgICAgZ3VpaW1hZ2UgKGNvbmNhdHdvcmQgInBhY2thZ2VzL2Jhc2UvIiAkY2dfbWFwICIuanBnIikgW10gNCAxICJkYXRhL2N1YmUucG5nIiAkY2dfbWFwCisgICAgICAgICAgICBdCisgICAgICAgIF0KKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpYnV0dG9uICJDcmVhdGUgZ2FtZSIgW2NnY3JlYXRlXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gImN1c3RvbSBnYW1lIgorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWVtb2RlIFsKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkZyZWUgRm9yIEFsbCIgW2NnX21vZGUgPSAiZmZhIjsgY2dfbW9kZV9sYWJlbCA9ICJGcmVlIEZvciBBbGwiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJUZWFtcGxheSIgW2NnX21vZGUgPSAidGVhbXBsYXkiOyBjZ19tb2RlX2xhYmVsID0gIlRlYW1wbGF5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiSW5zdGFnaWIiIFtjZ19tb2RlID0gImluc3RhIjsgY2dfbW9kZV9sYWJlbCA9ICJJbnN0YWdpYiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIFRlYW0iIFtjZ19tb2RlID0gImluc3RhdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiSW5zdGFnaWIgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkVmZmljaWVuY3kiIFtjZ19tb2RlID0gImVmZmljIjsgY2dfbW9kZV9sYWJlbCA9ICJFZmZpY2llbmN5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiRWZmaWNpZW5jeSBUZWFtIiBbY2dfbW9kZSA9ICJlZmZpY3RlYW0iOyBjZ19tb2RlX2xhYmVsID0gIkVmZmljaWVuY3kgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MiIFtjZ19tb2RlID0gInRhYyI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MgVGVhbSIgW2NnX21vZGUgPSAidGFjdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyBUZWFtIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgXQorICAgICAgICAgICAgZ3VpYmFyCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkNhcHR1cmUiIFtjZ19tb2RlID0gImNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIkNhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJSZWdlbiBDYXB0dXJlIiBbY2dfbW9kZSA9ICJyZWdlbmNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIlJlZ2VuIENhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJDVEYiIFtjZ19tb2RlID0gImN0ZiI7IGNnX21vZGVfbGFiZWwgPSAiQ2FwdHVyZSBUaGUgRmxhZyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIENURiIgW2NnX21vZGUgPSAiaW5zdGFjdGYiOyBjZ19tb2RlX2xhYmVsID0gIkluc3RhZ2liIENURiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlByb3RlY3QiIFtjZ19tb2RlID0gInByb3RlY3QiOyBjZ19tb2RlX2xhYmVsID0gIlByb3RlY3QiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJIb2xkIiBbY2dfbW9kZSA9ICJob2xkIjsgY2dfbW9kZV9sYWJlbCA9ICJIb2xkIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiQ29sbGVjdCIgW2NnX21vZGUgPSAiY29sbGVjdCI7IGNnX21vZGVfbGFiZWwgPSAiQ29sbGVjdCI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgIF0KKyAgICAgICAgXQorICAgIF0gImdhbWUgbW9kZSIKKworICAgIG5ld2d1aSBjdXN0b21nYW1lbWFwcyBbCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzOF0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFw \ No newline at end of file From 5ba4c3e878be7b9028096a0186e1f48c8bbcfa64 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:04:41 -0500 Subject: [PATCH 09/17] Stage verified native fix chunk 4/8 --- .github/native-small.03 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.03 diff --git a/.github/native-small.03 b/.github/native-small.03 new file mode 100644 index 00000000..79892c4d --- /dev/null +++ b/.github/native-small.03 @@ -0,0 +1 @@ +aXRlbXMgJGZmYW1hcHM5XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDQiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczEwXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczExXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImNhcHR1cmUgMSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczJdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczNdCisgICAgICAgIF0KKyAgICAgICAgZ3VpdGFiICJjYXB0dXJlIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM0XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM1XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY2FwdHVyZSAzIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNhcHR1cmVtYXBzN10KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDEiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgIm90aGVyIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNvbmNlcHRtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkc3BtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkcnBnbWFwc10KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImN1c3RvbSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjZ2N1c3RvbW1hcHNdCisgICAgICAgIF0KKyAgICBdICJjaG9vc2UgbWFwIgorCisgICAgbmV3Z3VpIGpvaW5wYXNzd29yZCBbCisgICAgICAgIGd1aXRleHQgKGNvbmNhdHdvcmQgIlBhc3N3b3JkIHJlcXVpcmVkIGZvciAiICRjZ19qb2luX3RhcmdldCkgMAorICAgICAgICBndWlmaWVsZCBjZ19qb2luX3Bhc3N3b3JkIDI4CisgICAgICAgIGd1aWJhcgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aWJ1dHRvbiAiSm9pbiIgW2NsZWFyZ3VpIDE7IGpvaW4gJGNnX2pvaW5fdGFyZ2V0ICRjZ19qb2luX3Bhc3N3b3JkXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gInBhc3N3b3JkIgorCiAgICAgbmV3Z3VpIGNvbnRlbnQgWwogICAgICAgICBndWlidXR0b24gIm1vZHMuLiIgICJzaG93Z3VpIG1vZHMiCiAgICAgICAgIGd1aWJ1dHRvbiAicHV0IG1vZHMgaW4gdXJsLi4iICBbanMgIk1vZHVsZS5hc3NldHMubW9kc1RvVVJMKCkiXQpAQCAtNTUzLDcgKzY4OSw3IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICAgICAgICBndWliYXIKICAgICAgIF0KICAgICAgIGd1aWJ1dHRvbiAic2VydmVyIGJyb3dzZXIuLiIgInNob3dndWkgaW50ZWdyYXRlZCIKLSAgICAgIGd1aWJ1dHRvbiAiY3JlYXRlIGN1c3RvbSBnYW1lLi4uIiBbanMgIk1vZHVsZS5jbHVzdGVyLm9wZW5DcmVhdGVHYW1lKCkiXQorICAgICAgZ3VpYnV0dG9uICJjcmVhdGUgY3VzdG9tIGdhbWUuLi4iIFtz \ No newline at end of file From 2e938bd32b042431a59e941ec2a90ebb5781272c Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:05:39 -0500 Subject: [PATCH 10/17] Stage verified native fix chunk 5/8 --- .github/native-small.04 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.04 diff --git a/.github/native-small.04 b/.github/native-small.04 new file mode 100644 index 00000000..ddab14bb --- /dev/null +++ b/.github/native-small.04 @@ -0,0 +1 @@ +aG93Z3VpIGN1c3RvbWdhbWVdCiAgICAgICBndWlidXR0b24gInJhbmRvbSBtYXAuLiIgICJtYXAgcmFuZG9tIgogICAgICAgZ3VpYnV0dG9uICJjb250ZW50Li4iICJzaG93Z3VpIGNvbnRlbnQiCiAgICAgICBpZiAoJGZ1bGxzY3JlZW4pIFsKQEAgLTg2MSw0NyArOTk3LDU1IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICB9CiAKICAgICBNb2R1bGUuY2x1c3RlciA9IHsKLSAgICAgIG9wZW5DcmVhdGVHYW1lOiAoKSA9PiB7Ci0gICAgICAgIHNldENyZWF0ZUZvcm0oREVGQVVMVF9DUkVBVEVfRk9STSkKLSAgICAgICAgc2V0Q3JlYXRlR2FtZU9wZW4odHJ1ZSkKLSAgICAgIH0sCi0gICAgICBzdWJtaXRDcmVhdGVHYW1lOiAoZm9ybTogQ3JlYXRlR2FtZUZvcm0pID0+IHsKKyAgICAgIGNyZWF0ZUdhbWU6IChwcmVzZXQ6IHN0cmluZywgbW9kZTogc3RyaW5nKSA9PiB7CiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewotICAgICAgICAgIHNldENyZWF0ZUdhbWVCdXN5KHRydWUpCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChmb3JtLnZpc2liaWxpdHkgPT09ICdwYXNzd29yZCcgJiYgZm9ybS5wYXNzd29yZC50cmltKCkubGVuZ3RoIDwgMykgeworICAgICAgICAgICAgbGV0IGdhbWVNb2RlID0gbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScKKyAgICAgICAgICAgIGxldCBtYXAgPSAnY29tcGxleCcKKyAgICAgICAgICAgIGxldCB2aXNpYmlsaXR5ID0gJ3VubGlzdGVkJworICAgICAgICAgICAgbGV0IHBhc3N3b3JkID0gJycKKyAgICAgICAgICAgIGxldCBib3RzID0gMAorICAgICAgICAgICAgbGV0IHNraWxsID0gNzAKKyAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IDMwMAorCisgICAgICAgICAgICAvLyBOYXRpdmUgQ3ViZVNjcmlwdCBHVUkgc2VuZHMgb25lIGNvbXBhY3Qgc3BlYyB0aHJvdWdoIHRoZSBleGlzdGluZworICAgICAgICAgICAgLy8gZW5naW5lIGNyZWF0ZWdhbWUgY29tbWFuZC4gUGFyc2UgdmFsdWVzIGZyb20gdGhlIGVuZCBzbyBwYXNzd29yZHMKKyAgICAgICAgICAgIC8vIG1heSBjb250YWluIHRoZSBkZWxpbWl0ZXIgd2l0aG91dCBjb3JydXB0aW5nIHRoZSByZW1haW5pbmcgZmllbGRzLgorICAgICAgICAgICAgaWYgKHByZXNldC5pbmNsdWRlcygnfCcpKSB7CisgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gcHJlc2V0LnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgZ2FtZU1vZGUgPSBwYXJ0cy5zaGlmdCgpIHx8ICdmZmEnCisgICAgICAgICAgICAgIG1hcCA9IHBhcnRzLnNoaWZ0KCkgfHwgJ2NvbXBsZXgnCisgICAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlDb2RlID0gcGFydHMuc2hpZnQoKSB8fCAnMicKKyAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9IHZpc2liaWxpdHlDb2RlID09PSAnMCcgPyAncHVibGljJyA6IHZpc2liaWxpdHlDb2RlID09PSAnMScgPyAncGFzc3dvcmQnIDogJ3VubGlzdGVkJworICAgICAgICAgICAgICBkdXJhdGlvbiA9IE51bWJlcihwYXJ0cy5wb3AoKSB8fCAzMDApCisgICAgICAgICAgICAgIHNraWxsID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDcwKQorICAgICAgICAgICAgICBib3RzID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDApCisgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFydHMuam9pbignfCcpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2aXNpYmlsaXR5ID09PSAncGFzc3dvcmQnICYmIHBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuJykKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBgJHtnYW1lTW9kZX0gb24gJHttYXB9YAogICAgICAgICAgICAgY29uc3QgYXJncyA9IFsKICAgICAgICAgICAgICAgJ2NyZWF0ZWdhbWUnLAotICAgICAgICAgICAgICBmb3JtLm1vZGUsCi0gICAgICAgICAgICAgIGZvcm0ubWFwLAotICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke2Zvcm0udmlzaWJpbGl0eX1gLAotICAgICAgICAgICAgICBgcGFzc3dvcmQ9JHtlbmNvZGVDb21tYW5kVmFsdWUoZm9ybS5wYXNzd29yZCl9YCwKLSAgICAgICAgICAgICAgYGJvdHM9JHtmb3JtLmJvdHN9YCwKLSAgICAgICAgICAgICAgYHNraWxsPSR7Zm9ybS5za2lsbH1gLAotICAgICAgICAgICAgICBgZHVyYXRpb249JHtmb3JtLmR1cmF0aW9ufWAsCi0gICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZShmb3JtLnRpdGxlKX1gLAorICAgICAgICAgICAgICBnYW1lTW9kZSwKKyAgICAgICAgICAgICAgbWFwLAorICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke3Zpc2liaWxpdHl9YCwKKyAgICAgICAgICAgICAgYHBhc3N3b3JkPSR7ZW5jb2RlQ29tbWFuZFZhbHVlKHBhc3N3b3JkKX1gLAorICAgICAgICAgICAgICBgYm90cz0ke01hdGgubWF4KDAsIE1hdGgubWluKDEyLCBNYXRoLnRydW5jKGJvdHMpKSl9YCwKKyAgICAgICAgICAgICAgYHNraWxsPSR7TWF0aC5tYXgoMSwgTWF0aC5taW4oMTAxLCBNYXRoLnRydW5jKHNraWxsKSkpfWAsCisgICAgICAgICAgICAgIGBkdXJhdGlvbj0ke01hdGgubWF4KDE4MCwgTWF0aC5taW4oOTAwLCBNYXRoLnRydW5jKGR1cmF0aW9uKSkpfWAsCisgICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZSh0aXRsZSl9YCwKICAgICAgICAgICAgIF0KICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoYXJncy5qb2luKCcgJykpCi0gICAgICAgICAgICBzZXRDcmVhdGVHYW1lT3BlbihmYWxzZSkKICAgICAgICAgICAgIGxvZy5zdWNjZXNzKCdjdXN0b20gZ2FtZSBjcmVhdGVkOyBzaGFyZSB0aGUgVVJMIG9yIHJvb20gY29kZSB3aXRoIGZyaWVuZHMnKQogICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgIGxvZy5lcnJvcihgZmFpbGVkIHRvIGNyZWF0ZSBnYW1lOiAke2V9YCkKLSAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgc2V0 \ No newline at end of file From bdea49540e75ad3cc84e6fbab7deea8be2a2f3c6 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:06:38 -0500 Subject: [PATCH 11/17] Stage verified native fix chunk 6/8 --- .github/native-small.05 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.05 diff --git a/.github/native-small.05 b/.github/native-small.05 new file mode 100644 index 00000000..83da9be8 --- /dev/null +++ b/.github/native-small.05 @@ -0,0 +1 @@ +Q3JlYXRlR2FtZUJ1c3koZmFsc2UpCiAgICAgICAgICAgfQogICAgICAgICB9KSgpCiAgICAgICB9LAotICAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHsKLSAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uREVGQVVMVF9DUkVBVEVfRk9STSwgbW9kZTogbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScgfQotICAgICAgICBNb2R1bGUuY2x1c3Rlci5zdWJtaXRDcmVhdGVHYW1lKG5leHQpCi0gICAgICB9LAotICAgICAgcHJvbXB0Sm9pbjogKG5hbWU6IHN0cmluZykgPT4gewotICAgICAgICBjb25zdCBwYXNzd29yZCA9IHdpbmRvdy5wcm9tcHQoYFBhc3N3b3JkIGZvciAke25hbWV9OmApCi0gICAgICAgIGlmIChwYXNzd29yZCA9PSBudWxsKSByZXR1cm4KLSAgICAgICAgTW9kdWxlLmNsdXN0ZXIuY29ubmVjdChuYW1lLCBwYXNzd29yZCkKLSAgICAgIH0sCiAgICAgICBjb25uZWN0OiAobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiB7CiAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5hbWUubGVuZ3RoID09PSAwID8gJ2ZmYScgOiBuYW1lCiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewpAQCAtOTExLDcgKzEwNTUsOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlKQogICAgICAgICAgICAgaWYgKCFwYXNzd29yZCAmJiBtZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luY29ycmVjdCBwYXNzd29yZCcpKSB7Ci0gICAgICAgICAgICAgIE1vZHVsZS5jbHVzdGVyLnByb21wdEpvaW4odGFyZ2V0KQorICAgICAgICAgICAgICBjb25zdCBzYWZlVGFyZ2V0ID0gdGFyZ2V0LnJlcGxhY2UoL1teQS1aYS16MC05Xy1dL2csICcnKQorICAgICAgICAgICAgICBCYW5hbmFCcmVhZC5leGVjdXRlKGBjZ19qb2luX3RhcmdldCA9ICIke3NhZmVUYXJnZXR9IjsgY2dfam9pbl9wYXNzd29yZCA9ICIiOyBzaG93Z3VpIGpvaW5wYXNzd29yZGApCiAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9nLmVycm9yKGBmYWlsZWQgdG8gam9pbiAke3RhcmdldH06ICR7ZX1gKQpAQCAtMTAyNiw3ICsxMTcxLDcgQEAgZnVuY3Rpb24gQXBwKCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGJvdHMgPSBzLkJvdHMgPiAwID8gYCwgJHtzLkJvdHN9IGJvdCR7cy5Cb3RzID09PSAxID8gJycgOiAncyd9YCA6ICcnCiAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBgJHtsb2NrfSR7Y3VzdG9tfSR7cy5BbGlhc30gKF5mMiR7cy5OdW1DbGllbnRzfSBwbGF5ZXIke3MuTnVtQ2xpZW50cyA9PT0gMSA/ICcnIDogJ3MnfSR7Ym90c31eZjcpIC0gJHttb2RlTmFtZShzLk1vZGUpfSAke3MuTWFwfWAKICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBzLlBhc3N3b3JkCi0gICAgICAgICAgICAgICAgICA/IGBbanMgIk1vZHVsZS5jbHVzdGVyLnByb21wdEpvaW4oJyR7cy5BbGlhc30nKSJdYAorICAgICAgICAgICAgICAgICAgPyBgW2NnX2pvaW5fdGFyZ2V0ID0gXCIke3MuQWxpYXN9XCI7IGNnX2pvaW5fcGFzc3dvcmQgPSBcIlwiOyBzaG93Z3VpIGpvaW5wYXNzd29yZF1gCiAgICAgICAgICAgICAgICAgICA6IGBbam9pbiAke3MuQWxpYXN9XWAKICAgICAgICAgICAgICAgICByZXR1cm4gYGd1aWJ1dHRvbiAiJHtsYWJlbH0iICR7YWN0aW9ufWAKICAgICAgICAgICAgICAgfQpAQCAtMTIyMiw2NyArMTM2Nyw2IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICAgICAgICA8L0ZsZXg+CiAgICAgICAgIDwvRHJvcFRhcmdldD4KICAgICAgIDwvRmlsZURyb3BwZXI+Ci0gICAgICB7Y3JlYXRlR2FtZU9wZW4gJiYgKAotICAgICAgICA8TW9kYWxCYWNrZHJvcCBvbk1vdXNlRG93bj17KGV2ZW50KSA9PiB7Ci0gICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiAhY3JlYXRlR2FtZUJ1c3kpIHNldENyZWF0ZUdhbWVPcGVuKGZhbHNlKQotICAgICAgICB9fT4KLSAgICAgICAgICA8TW9kYWxDYXJkPgotICAgICAgICAgICAgPEhlYWRpbmcgc2l6ZT0ibWQiPkNyZWF0ZSBjdXN0b20gZ2FtZTwvSGVhZGluZz4KLSAgICAgICAgICAgIDxsYWJlbD5HYW1lIG5hbWU8L2xhYmVsPgotICAgICAgICAgICAgPGlucHV0IHZhbHVlPXtjcmVhdGVGb3JtLnRpdGxlfSBtYXhMZW5ndGg9ezQwfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCB0aXRsZTogZS50YXJnZXQudmFsdWUgfSl9IC8+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0icm93Ij4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8bGFiZWw+TW9kZTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT17Y3JlYXRlRm9ybS5tb2RlfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCBtb2RlOiBlLnRhcmdldC52YWx1ZSB9KX0+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmZmEiPkZyZWUgRm9yIEFsbDwvb3B0aW9uPgotICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaW5zdGEiPkluc3RhZ2liPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlZmZpYyI+RWZmaWNpZW5jeTwvb3B0aW9uPgotICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY3RmIj5DYXB0dXJlIHRoZSBGbGFnPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxsYWJlbD5NYXA8L2xhYmVsPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e2NyZWF0ZUZvcm0ubWFwfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCBtYXA6IGUudGFyZ2V0LnZhbHVlIH0pfT4KLSAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFs \ No newline at end of file From b426ba1dc08bc5e29492e7dcee2dbb9c9f560c4d Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:07:33 -0500 Subject: [PATCH 12/17] Stage verified native fix chunk 7/8 --- .github/native-small.06 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.06 diff --git a/.github/native-small.06 b/.github/native-small.06 new file mode 100644 index 00000000..518d8bec --- /dev/null +++ b/.github/native-small.06 @@ -0,0 +1 @@ +dWU9ImNvbXBsZXgiPkNvbXBsZXg8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InR1cmJpbmUiPlR1cmJpbmU8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImR1c3QyIj5EdXN0IDI8L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxsYWJlbD5WaXNpYmlsaXR5PC9sYWJlbD4KLSAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e2NyZWF0ZUZvcm0udmlzaWJpbGl0eX0gb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVGb3JtKHsgLi4uY3JlYXRlRm9ybSwgdmlzaWJpbGl0eTogZS50YXJnZXQudmFsdWUgYXMgQ3JlYXRlR2FtZUZvcm1bJ3Zpc2liaWxpdHknXSB9KX0+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1YmxpYyI+UHVibGljIOKAlCBsaXN0ZWQgZm9yIGV2ZXJ5b25lPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InBhc3N3b3JkIj5QYXNzd29yZCBwcm90ZWN0ZWQg4oCUIGxpc3RlZCB3aXRoIGEgbG9jazwvb3B0aW9uPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1bmxpc3RlZCI+VW5saXN0ZWQg4oCUIGpvaW4gYnkgc2hhcmVkIFVSTC9jb2RlPC9vcHRpb24+Ci0gICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIHtjcmVhdGVGb3JtLnZpc2liaWxpdHkgPT09ICdwYXNzd29yZCcgJiYgKAotICAgICAgICAgICAgICA8PjxsYWJlbD5QYXNzd29yZDwvbGFiZWw+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZT17Y3JlYXRlRm9ybS5wYXNzd29yZH0gbWF4TGVuZ3RoPXs2NH0gb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVGb3JtKHsgLi4uY3JlYXRlRm9ybSwgcGFzc3dvcmQ6IGUudGFyZ2V0LnZhbHVlIH0pfSAvPjwvPgotICAgICAgICAgICAgKX0KLSAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJyb3ciPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxsYWJlbD5Cb3RzPC9sYWJlbD4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtjcmVhdGVGb3JtLmJvdHN9IG9uQ2hhbmdlPXsoZSkgPT4gc2V0Q3JlYXRlRm9ybSh7IC4uLmNyZWF0ZUZvcm0sIGJvdHM6IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfSl9PgotICAgICAgICAgICAgICAgICAge1swLCAxLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTJdLm1hcCgobikgPT4gPG9wdGlvbiBrZXk9e259IHZhbHVlPXtufT57bn08L29wdGlvbj4pfQotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8bGFiZWw+Qm90IHNraWxsPC9sYWJlbD4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtjcmVhdGVGb3JtLnNraWxsfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCBza2lsbDogTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB9KX0+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXs0NX0+RWFzeTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ezY1fT5Ob3JtYWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXs4MH0+SGFyZDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ezk1fT5CcnV0YWw8L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxsYWJlbD5Sb3VuZCBsZW5ndGg8L2xhYmVsPgotICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT17Y3JlYXRlRm9ybS5kdXJhdGlvbn0gb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVGb3JtKHsgLi4uY3JlYXRlRm9ybSwgZHVyYXRpb246IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfSl9PgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXsxODB9PjMgbWludXRlczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ezMwMH0+NSBtaW51dGVzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT17NDgwfT44IG1pbnV0ZXM8L29wdGlvbj48b3B0aW9uIHZhbHVlPXs2MDB9PjEwIG1pbnV0ZXM8L29wdGlvbj4KLSAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImFjdGlvbnMiPgotICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0ic2Vjb25kYXJ5IiBkaXNhYmxlZD17Y3JlYXRlR2FtZUJ1c3l9IG9uQ2xpY2s9eygpID0+IHNldENyZWF0ZUdhbWVPcGVuKGZhbHNlKX0+Q2FuY2VsPC9idXR0b24+Ci0gICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSJwcmltYXJ5IiBkaXNhYmxlZD17Y3JlYXRlR2FtZUJ1c3l9IG9uQ2xpY2s9eygpID0+IE1vZHVsZS5jbHVzdGVyLnN1Ym1pdENyZWF0ZUdhbWUoY3JlYXRlRm9ybSl9PntjcmVhdGVHYW1lQnVzeSA/ICdDcmVhdGluZ+KApicgOiAnQ3JlYXRlIGdhbWUnfTwvYnV0dG9uPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9Nb2RhbENhcmQ+Ci0gICAgICAgIDwvTW9kYWxCYWNrZHJvcD4KLSAgICAgICl9CiAgICAgPC9PdXRlckNvbnRhaW5lcj4KICAgKQogfQpkaWZmIC0tZ2l0IGEvcGtnL2dhbWUvcHJvdG9jb2wvcGh5c2ljcy5nbyBiL3BrZy9nYW1lL3Byb3RvY29sL3BoeXNpY3MuZ28KaW5kZXggYjc5MjVkNS4uY2IxZDhiZCAxMDA2NDQKLS0tIGEvcGtnL2dhbWUvcHJvdG9jb2wvcGh5c2ljcy5nbworKysgYi9wa2cvZ2FtZS9wcm90b2NvbC9waHlzaWNzLmdvCkBAIC0xLDYgKzEsNyBAQAogcGFja2FnZSBwcm90b2NvbAogCiBpbXBvcnQgKAorCSJmbXQiCiAJIm1hdGgiCiAKIAkiZ2l0aHViLmNvbS9jZm91c3Qvc291ci9wa2cvZ2FtZS9jb25zdGFudHMiCkBAIC0zMzAsMyArMzMxLDI0IEBAIGZ1bmMgKHN0YXRlIFBoeXNpY3NTdGF0ZSkgTWFyc2hhbChwICppby5QYWNrZXQpIGVycm9yIHsKIAogdmFyIF8gaW8uTWFyc2hhbGFibGUgPSAoKlBoeXNpY3NTdGF0ZSkobmlsKQogdmFyIF8g \ No newline at end of file From fc2dc341bbd058269778e3c8cdef8d79517d9dd9 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:08:01 -0500 Subject: [PATCH 13/17] Stage verified native fix chunk 8/8 --- .github/native-small.07 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/native-small.07 diff --git a/.github/native-small.07 b/.github/native-small.07 new file mode 100644 index 00000000..8e275450 --- /dev/null +++ b/.github/native-small.07 @@ -0,0 +1 @@ +aW8uVW5tYXJzaGFsYWJsZSA9ICgqUGh5c2ljc1N0YXRlKShuaWwpCisKKy8vIFBvcyB1c2VzIFNhdWVyYnJhdGVuJ3MgY29tcGFjdCB1bnNpZ25lZCBpbnRlZ2VyIGVuY29kaW5nIGZvciB0aGUgY2xpZW50CisvLyBudW1iZXIuIFRoZSBnZW5lcmljIHJlZmxlY3Rpb24gZGVjb2RlciB1c2VzIHNpZ25lZCBwdXRpbnQvZ2V0aW50IGZvciBpbnQzMiwKKy8vIHdoaWNoIGhhcHBlbnMgdG8gd29yayBmb3IgaHVtYW4gY2xpZW50IG51bWJlcnMgYmVsb3cgMTI4IGJ1dCBjb3JydXB0cyB0aGUKKy8vIHBhY2tldCBzdHJlYW0gZm9yIEFJIGNsaWVudCBudW1iZXJzICgxMjgrKS4KK2Z1bmMgKG0gUG9zKSBNYXJzaGFsKHAgKmlvLlBhY2tldCkgZXJyb3IgeworCXAuUHV0VWludCh1aW50MzIobS5DbGllbnQpKQorCXJldHVybiBtLlN0YXRlLk1hcnNoYWwocCkKK30KKworZnVuYyAobSAqUG9zKSBVbm1hcnNoYWwocCAqaW8uUGFja2V0KSBlcnJvciB7CisJY2xpZW50LCBvayA6PSBwLkdldFVpbnQoKQorCWlmICFvayB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJlcnJvciByZWFkaW5nIGNsaWVudCBudW1iZXIiKQorCX0KKwltLkNsaWVudCA9IGludDMyKGNsaWVudCkKKwlyZXR1cm4gbS5TdGF0ZS5Vbm1hcnNoYWwocCkKK30KKwordmFyIF8gaW8uTWFyc2hhbGFibGUgPSBQb3N7fQordmFyIF8gaW8uVW5tYXJzaGFsYWJsZSA9ICgqUG9zKShuaWwpCg== \ No newline at end of file From ed1e087e27ce571e9b81658f08b655882c0e0421 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:08:17 -0500 Subject: [PATCH 14/17] Add bot position packet regression test --- pkg/game/protocol/pos_test.go | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pkg/game/protocol/pos_test.go diff --git a/pkg/game/protocol/pos_test.go b/pkg/game/protocol/pos_test.go new file mode 100644 index 00000000..20714cab --- /dev/null +++ b/pkg/game/protocol/pos_test.go @@ -0,0 +1,53 @@ +package protocol + +import ( + "testing" + + gameio "github.com/cfoust/sour/pkg/game/io" +) + +func TestBotPositionUsesUnsignedClientNumber(t *testing.T) { + state := PhysicsState{ + State: 4, + LifeSequence: 1, + Yaw: 90, + Pitch: 0, + Roll: 0, + O: Vec{X: 10, Y: 20, Z: 30}, + } + + encoded, err := Encode( + Pos{Client: 128, State: state}, + Ping{Cmillis: 1234}, + ) + if err != nil { + t.Fatalf("encode failed: %v", err) + } + + messages, err := Decode(encoded, true) + if err != nil { + t.Fatalf("decode failed: %v", err) + } + if len(messages) != 2 { + t.Fatalf("expected 2 messages, got %d", len(messages)) + } + pos, ok := messages[0].(Pos) + if !ok { + t.Fatalf("first message is %T, expected Pos", messages[0]) + } + if pos.Client != 128 { + t.Fatalf("client number = %d, expected 128", pos.Client) + } + if _, ok := messages[1].(Ping); !ok { + t.Fatalf("second message is %T, expected Ping", messages[1]) + } + + // Confirm the wire encoding really is putuint rather than putint. + p := gameio.Packet(encoded) + if code, ok := p.GetInt(); !ok || MessageCode(code) != N_POS { + t.Fatal("missing N_POS prefix") + } + if cn, ok := p.GetUint(); !ok || cn != 128 { + t.Fatalf("wire client number = %d, expected 128", cn) + } +} From 6da3b70f1d69b993746d9161f5bc9d61a1b55e7d Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:08:53 -0500 Subject: [PATCH 15/17] Apply verified native custom game repair --- .github/workflows/apply-native-fix.yml | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/apply-native-fix.yml diff --git a/.github/workflows/apply-native-fix.yml b/.github/workflows/apply-native-fix.yml new file mode 100644 index 00000000..6f7be3c8 --- /dev/null +++ b/.github/workflows/apply-native-fix.yml @@ -0,0 +1,63 @@ +name: Apply native custom game fix + +on: + push: + branches: + - agent/fix-native-custom-games + paths: + - .github/workflows/apply-native-fix.yml + +permissions: + contents: write + +jobs: + apply: + runs-on: ubuntu-latest + steps: + - name: Check out repair branch + uses: actions/checkout@v4 + with: + ref: agent/fix-native-custom-games + fetch-depth: 0 + + - name: Reconstruct and verify patch + shell: bash + run: | + set -euo pipefail + cat .github/native-small.* > /tmp/native-fix.patch.b64 + base64 --decode /tmp/native-fix.patch.b64 > /tmp/native-fix.patch + echo "eb4498070eb9f6832d54b3153ee6388abf1c98857f620caf7b63c178b26b46b9 /tmp/native-fix.patch" | sha256sum --check --strict + git apply --check /tmp/native-fix.patch + git apply /tmp/native-fix.patch + + - name: Format and validate repair + shell: bash + run: | + set -euo pipefail + gofmt -w pkg/game/protocol/physics.go pkg/game/protocol/pos_test.go + git diff --check + if grep -RInE 'ModalBackdrop|ModalCard|createGameOpen|window\.prompt|promptJoin' client/src/index.tsx client/definitions/global.d.ts; then + echo "Browser overlay or prompt code remains" >&2 + exit 1 + fi + grep -q 'newgui customgame' client/src/index.tsx + grep -q 'newgui customgamemaps' client/src/index.tsx + grep -q 'GetUint()' pkg/game/protocol/physics.go + go test ./pkg/game/protocol + + - name: Remove temporary staging files + shell: bash + run: | + rm -f .github/native-small.* + rm -f .github/workflows/apply-native-fix.yml + rm -f .github/workflows/export-fix-source.yml + + - name: Commit repair + shell: bash + run: | + set -euo pipefail + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add -A + git commit -m "Replace custom-game overlay and fix bot packet decoding" + git push origin HEAD:agent/fix-native-custom-games From e37732441434f4cece2b0da71c8fa7df9afdfb78 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 03:09:22 +0000 Subject: [PATCH 16/17] Replace custom-game overlay and fix bot packet decoding --- .github/native-small.00 | 1 - .github/native-small.01 | 1 - .github/native-small.02 | 1 - .github/native-small.03 | 1 - .github/native-small.04 | 1 - .github/native-small.05 | 1 - .github/native-small.06 | 1 - .github/native-small.07 | 1 - .github/workflows/apply-native-fix.yml | 63 ---- .github/workflows/export-fix-source.yml | 32 -- client/definitions/global.d.ts | 12 - client/src/index.tsx | 398 ++++++++++++++---------- pkg/game/protocol/physics.go | 22 ++ 13 files changed, 263 insertions(+), 272 deletions(-) delete mode 100644 .github/native-small.00 delete mode 100644 .github/native-small.01 delete mode 100644 .github/native-small.02 delete mode 100644 .github/native-small.03 delete mode 100644 .github/native-small.04 delete mode 100644 .github/native-small.05 delete mode 100644 .github/native-small.06 delete mode 100644 .github/native-small.07 delete mode 100644 .github/workflows/apply-native-fix.yml delete mode 100644 .github/workflows/export-fix-source.yml diff --git a/.github/native-small.00 b/.github/native-small.00 deleted file mode 100644 index 980393c2..00000000 --- a/.github/native-small.00 +++ /dev/null @@ -1 +0,0 @@ -ZGlmZiAtLWdpdCBhL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cyBiL2NsaWVudC9kZWZpbml0aW9ucy9nbG9iYWwuZC50cwppbmRleCAxNTdjZjU4Li43Y2RjNTlkIDEwMDY0NAotLS0gYS9jbGllbnQvZGVmaW5pdGlvbnMvZ2xvYmFsLmQudHMKKysrIGIvY2xpZW50L2RlZmluaXRpb25zL2dsb2JhbC5kLnRzCkBAIC0xMTAsMTkgKzExMCw3IEBAIHR5cGUgTW9kdWxlVHlwZSA9IHsKICAgfQogCiAgIGNsdXN0ZXI6IHsKLSAgICBvcGVuQ3JlYXRlR2FtZTogKCkgPT4gdm9pZAotICAgIHN1Ym1pdENyZWF0ZUdhbWU6IChmb3JtOiB7Ci0gICAgICB0aXRsZTogc3RyaW5nCi0gICAgICBtb2RlOiBzdHJpbmcKLSAgICAgIG1hcDogc3RyaW5nCi0gICAgICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gICAgICBwYXNzd29yZDogc3RyaW5nCi0gICAgICBib3RzOiBudW1iZXIKLSAgICAgIHNraWxsOiBudW1iZXIKLSAgICAgIGR1cmF0aW9uOiBudW1iZXIKLSAgICB9KSA9PiB2b2lkCiAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHZvaWQKLSAgICBwcm9tcHRKb2luOiAobmFtZTogc3RyaW5nKSA9PiB2b2lkCiAgICAgY29ubmVjdDogKG5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4gdm9pZAogICAgIHNlbmQ6IChjaGFubmVsOiBudW1iZXIsIGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKSA9PiB2b2lkCiAgICAgcmVjZWl2ZTogKGRhdGFQdHI6IG51bWJlciwgZGF0YUxlbmd0aFB0cjogbnVtYmVyKSA9PiB2b2lkCmRpZmYgLS1naXQgYS9jbGllbnQvc3JjL2luZGV4LnRzeCBiL2NsaWVudC9zcmMvaW5kZXgudHN4CmluZGV4IGM5ZWE0Y2UuLjAzNGNhZGEgMTAwNjQ0Ci0tLSBhL2NsaWVudC9zcmMvaW5kZXgudHN4CisrKyBiL2NsaWVudC9zcmMvaW5kZXgudHN4CkBAIC04LDEzICs4LDExIEBAIGltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nCiBpbXBvcnQgewogICBDZW50ZXIsCiAgIENoYWtyYVByb3ZpZGVyLAotICBCdXR0b24sCiAgIGV4dGVuZFRoZW1lLAogICBGbGV4LAogICBCb3gsCiAgIFZTdGFjaywKICAgSGVhZGluZywKLSAgU3BhY2VyLAogfSBmcm9tICdAY2hha3JhLXVpL3JlYWN0JwogCiBpbXBvcnQgdHlwZSB7IFRoZW1lQ29uZmlnIH0gZnJvbSAnQGNoYWtyYS11aS9yZWFjdCcKQEAgLTk4LDY3ICs5Niw2IEBAIGNvbnN0IERyb3BUYXJnZXQgPSBzdHlsZWQuZGl2YAogICB6LWluZGV4OiAyOwogYAogCi1jb25zdCBNb2RhbEJhY2tkcm9wID0gc3R5bGVkLmRpdmAKLSAgcG9zaXRpb246IGZpeGVkOwotICBpbnNldDogMDsKLSAgei1pbmRleDogMjA7Ci0gIGRpc3BsYXk6IGZsZXg7Ci0gIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gIGp1c3RpZnktY29udGVudDogY2VudGVyOwotICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzYpOwotICBwb2ludGVyLWV2ZW50czogYXV0bzsKLWAKLQotY29uc3QgTW9kYWxDYXJkID0gc3R5bGVkLmRpdmAKLSAgd2lkdGg6IG1pbig5MnZ3LCA1MjBweCk7Ci0gIG1heC1oZWlnaHQ6IDg4dmg7Ci0gIG92ZXJmbG93LXk6IGF1dG87Ci0gIHBhZGRpbmc6IDI0cHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7Ci0gIGJvcmRlci1yYWRpdXM6IDEwcHg7Ci0gIGJhY2tncm91bmQ6ICMxMDEzMTg7Ci0gIGNvbG9yOiAjZmZmOwotICBib3gtc2hhZG93OiAwIDI0cHggODBweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwotCi0gIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMTRweCAwIDZweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogI2NiZDVlMDsgfQotICBpbnB1dCwgc2VsZWN0IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nOiAxMHB4IDEycHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzNiNDI1MDsKLSAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgYmFja2dyb3VuZDogIzE5MWUyNzsKLSAgICBjb2xvcjogI2ZmZjsKLSAgfQotICAucm93IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDEycHg7IH0KLSAgLmFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyBnYXA6IDEwcHg7IG1hcmdpbi10b3A6IDIycHg7IH0KLSAgYnV0dG9uIHsgcGFkZGluZzogMTBweCAxNnB4OyBib3JkZXItcmFkaXVzOiA2cHg7IGJvcmRlcjogMDsgY3Vyc29yOiBwb2ludGVyOyB9Ci0gIGJ1dHRvbi5wcmltYXJ5IHsgYmFja2dyb3VuZDogI2U4ZWRmNTsgY29sb3I6ICMxMTE4Mjc7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KLSAgYnV0dG9uLnNlY29uZGFyeSB7IGJhY2tncm91bmQ6ICMyYTMwM2I7IGNvbG9yOiAjZmZmOyB9Ci0gIGJ1dHRvbjpkaXNhYmxlZCB7IG9wYWNpdHk6IDAuNTU7IGN1cnNvcjogd2FpdDsgfQotYAotCi10eXBlIENyZWF0ZUdhbWVGb3JtID0gewotICB0aXRsZTogc3RyaW5nCi0gIG1vZGU6IHN0cmluZwotICBtYXA6IHN0cmluZwotICB2aXNpYmlsaXR5OiAncHVibGljJyB8ICdwYXNzd29yZCcgfCAndW5saXN0ZWQnCi0gIHBhc3N3b3JkOiBzdHJpbmcKLSAgYm90czogbnVtYmVyCi0gIHNraWxsOiBudW1iZXIKLSAgZHVyYXRpb246IG51bWJlcgotfQotCi1jb25zdCBERUZBVUxUX0NSRUFURV9GT1JNOiBDcmVhdGVHYW1lRm9ybSA9IHsKLSAgdGl0bGU6ICdDdXN0b20gTWF0Y2gnLAotICBtb2RlOiAnZmZhJywKLSAgbWFwOiAnY29tcGxleCcsCi0gIHZpc2liaWxpdHk6ICd1bmxpc3RlZCcsCi0gIHBhc3N3b3JkOiAnJywKLSAgYm90czogMCwKLSAgc2tpbGw6IDcwLAotICBkdXJhdGlvbjogMzAwLAotfQotCiBjb25zdCBlbmNvZGVDb21tYW5kVmFsdWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7CiAgIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKQogICBsZXQgYmluYXJ5ID0gJycKQEAgLTMwMyw5ICsyNDAs \ No newline at end of file diff --git a/.github/native-small.01 b/.github/native-small.01 deleted file mode 100644 index a39e3a4e..00000000 --- a/.github/native-small.01 +++ /dev/null @@ -1 +0,0 @@ -NiBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgfSwKICAgfSkKIAotICBjb25zdCBbY3JlYXRlR2FtZU9wZW4sIHNldENyZWF0ZUdhbWVPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlR2FtZUJ1c3ksIHNldENyZWF0ZUdhbWVCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKQotICBjb25zdCBbY3JlYXRlRm9ybSwgc2V0Q3JlYXRlRm9ybV0gPSBSZWFjdC51c2VTdGF0ZTxDcmVhdGVHYW1lRm9ybT4oREVGQVVMVF9DUkVBVEVfRk9STSkKIAogICBjb25zdCBpbnRlcm5hbFNlcnZlcnNSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPihgbmV3Z3VpIGludGVncmF0ZWQgWwogICAgICAgICBndWl0YWIgInNlcnZlcnMiCkBAIC01MTcsNiArNDUxLDIwOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgLy8gICAke3JlbmRlckRpc2NvcmRCdXR0b24oYXV0aFN0YXRlKX0KIAogICAgIGNvbnN0IG1lbnUgPSBgCisgICAgLy8gTmF0aXZlIFNhdWVyYnJhdGVuIGN1c3RvbS1nYW1lIG1lbnVzLiBUaGVzZSBkZWxpYmVyYXRlbHkgbGl2ZSBpbnNpZGUgdGhlCisgICAgLy8gZW5naW5lIEdVSSBzbyBjdXJzb3IgbG9ja2luZywga2V5Ym9hcmQgZm9jdXMsIEVTQywgYW5kIHN0eWxpbmcgYWxsIGJlaGF2ZQorICAgIC8vIGV4YWN0bHkgbGlrZSB0aGUgcmVzdCBvZiB0aGUgZ2FtZS4KKyAgICBjZ19tb2RlID0gImZmYSIKKyAgICBjZ19tb2RlX2xhYmVsID0gIkZyZWUgRm9yIEFsbCIKKyAgICBjZ19tYXAgPSAiY29tcGxleCIKKyAgICBjZ192aXNpYmlsaXR5ID0gMgorICAgIGNnX3Bhc3N3b3JkID0gIiIKKyAgICBjZ19ib3RzID0gMAorICAgIGNnX3NraWxsID0gNzAKKyAgICBjZ19kdXJhdGlvbiA9IDMwMAorICAgIGNnX2pvaW5fdGFyZ2V0ID0gIiIKKyAgICBjZ19qb2luX3Bhc3N3b3JkID0gIiIKKworICAgIGNnc2VsZWN0bWFwID0gWworICAgICAgICBjZ19tYXAgPSAkYXJnMQorICAgICAgICBzaG93Z3VpIGN1c3RvbWdhbWUKKyAgICBdCisKKyAgICBnZW5jZ21hcGl0ZW1zID0gWworICAgICAgICBsb29wbGlzdCBjdXJtYXAgJGFyZzEgWworICAgICAgICAgICAgZ3VpYnV0dG9uICRjdXJtYXAgKGNvbmNhdHdvcmQgImNnc2VsZWN0bWFwICIgJGN1cm1hcCkgImN1YmUiCisgICAgICAgIF0KKyAgICBdCisKKyAgICBidWlsZGNnY3VzdG9tbWFwcyA9IFsKKyAgICAgICAgY2djdXN0b21tYXBzID0gIiIKKyAgICAgICAgbG9vcGZpbGVzIGN1cm1hcCAicGFja2FnZXMvYmFzZSIgIm9neiIgWworICAgICAgICAgICAgaWYgKDwgKGluZGV4b2YgJGFsbG1hcHMgJGN1cm1hcCkgMCkgWworICAgICAgICAgICAgICAgIGNnY3VzdG9tbWFwcyA9IChjb25jYXQgJGNnY3VzdG9tbWFwcyAoZXNjYXBlICRjdXJtYXApKQorICAgICAgICAgICAgXQorICAgICAgICBdCisgICAgICAgIGNnY3VzdG9tbWFwcyA9IChzb3J0bGlzdCAkY2djdXN0b21tYXBzIHggeSBbbmF0dXJhbHNvcnQgJHggJHldKQorICAgIF0KKworICAgIGNnY3JlYXRlID0gWworICAgICAgICBpZiAoJiYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgKDwgKHN0cmxlbiAkY2dfcGFzc3dvcmQpIDMpKSBbCisgICAgICAgICAgICBlY2hvICJeZjNQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycy4iCisgICAgICAgIF0gWworICAgICAgICAgICAgY2xlYXJndWkgMQorICAgICAgICAgICAgY3JlYXRlZ2FtZSAoY29uY2F0d29yZCAkY2dfbW9kZSAifCIgJGNnX21hcCAifCIgJGNnX3Zpc2liaWxpdHkgInwiICRjZ19wYXNzd29yZCAifCIgJGNnX2JvdHMgInwiICRjZ19za2lsbCAifCIgJGNnX2R1cmF0aW9uKSAiIgorICAgICAgICBdCisgICAgXQorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWUgWworICAgICAgICBndWl0ZXh0ICJDcmVhdGUgQ3VzdG9tIEdhbWUiIDAKKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTW9kZSIgMAorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAoY29uY2F0d29yZCAiICAiICRjZ19tb2RlX2xhYmVsKSBbc2hvd2d1aSBjdXN0b21nYW1lbW9kZV0gImN1YmUiCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAiTWFwIiAwCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uIChjb25jYXR3b3JkICIgICIgJGNnX21hcCkgW2J1aWxkY2djdXN0b21tYXBzOyBzaG93Z3VpIGN1c3RvbWdhbWVtYXBzXSAiY3ViZSIKKyAgICAgICAgICAgICAgICBndWl0ZXh0ICJWaXNpYmlsaXR5IiAwCisgICAgICAgICAgICAgICAgZ3VpcmFkaW8gIlB1YmxpYyAtIGxpc3RlZCBmb3IgZXZlcnlvbmUiIGNnX3Zpc2liaWxpdHkgMAorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJQYXNzd29yZCBwcm90ZWN0ZWQgLSBsaXN0ZWQgd2l0aCBhIGxvY2siIGNnX3Zpc2liaWxpdHkgMQorICAgICAgICAgICAgICAgIGd1aXJhZGlvICJVbmxpc3RlZCAtIGpvaW4gYnkgVVJMIG9yIHJvb20gY29kZSIgY2dfdmlzaWJpbGl0eSAyCisgICAgICAgICAgICAgICAgaWYgKD0gJGNnX3Zpc2liaWxpdHkgMSkgWworICAgICAgICAgICAgICAgICAgICBndWl0ZXh0ICJQYXNzd29yZCIgMAorICAgICAgICAgICAgICAgICAgICBndWlmaWVsZCBjZ19wYXNzd29yZCAyOAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiQm90czogIiAkY2dfYm90cykgMAorICAgICAgICAgICAgICAgIGd1aXNsaWRlciBjZ19ib3RzIDAgMTIKKyAgICAgICAgICAgICAgICBndWl0ZXh0IChjb25jYXR3b3JkICJCb3Qgc2tpbGw6ICIgJGNnX3NraWxsKSAwCisgICAgICAgICAgICAgICAgZ3Vpc2xpZGVyIGNnX3NraWxsIDEgMTAxCisgICAgICAgICAgICAgICAgZ3VpdGV4dCAoY29uY2F0d29yZCAiUm91bmQgbGVuZ3RoOiAiICRjZ19kdXJhdGlvbiAiIHNlY29uZHMiKSAwCisgICAgICAgICAgICAg \ No newline at end of file diff --git a/.github/native-small.02 b/.github/native-small.02 deleted file mode 100644 index 1de049f0..00000000 --- a/.github/native-small.02 +++ /dev/null @@ -1 +0,0 @@ -ICAgZ3Vpc2xpZGVyIGNnX2R1cmF0aW9uIDE4MCA5MDAKKyAgICAgICAgICAgICAgICBndWlzdHJ1dCAxCisgICAgICAgICAgICAgICAgZ3VpaW1hZ2UgKGNvbmNhdHdvcmQgInBhY2thZ2VzL2Jhc2UvIiAkY2dfbWFwICIuanBnIikgW10gNCAxICJkYXRhL2N1YmUucG5nIiAkY2dfbWFwCisgICAgICAgICAgICBdCisgICAgICAgIF0KKyAgICAgICAgZ3VpYmFyCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3VpYnV0dG9uICJDcmVhdGUgZ2FtZSIgW2NnY3JlYXRlXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gImN1c3RvbSBnYW1lIgorCisgICAgbmV3Z3VpIGN1c3RvbWdhbWVtb2RlIFsKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkZyZWUgRm9yIEFsbCIgW2NnX21vZGUgPSAiZmZhIjsgY2dfbW9kZV9sYWJlbCA9ICJGcmVlIEZvciBBbGwiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJUZWFtcGxheSIgW2NnX21vZGUgPSAidGVhbXBsYXkiOyBjZ19tb2RlX2xhYmVsID0gIlRlYW1wbGF5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiSW5zdGFnaWIiIFtjZ19tb2RlID0gImluc3RhIjsgY2dfbW9kZV9sYWJlbCA9ICJJbnN0YWdpYiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIFRlYW0iIFtjZ19tb2RlID0gImluc3RhdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiSW5zdGFnaWIgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkVmZmljaWVuY3kiIFtjZ19tb2RlID0gImVmZmljIjsgY2dfbW9kZV9sYWJlbCA9ICJFZmZpY2llbmN5Ijsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiRWZmaWNpZW5jeSBUZWFtIiBbY2dfbW9kZSA9ICJlZmZpY3RlYW0iOyBjZ19tb2RlX2xhYmVsID0gIkVmZmljaWVuY3kgVGVhbSI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MiIFtjZ19tb2RlID0gInRhYyI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlRhY3RpY3MgVGVhbSIgW2NnX21vZGUgPSAidGFjdGVhbSI7IGNnX21vZGVfbGFiZWwgPSAiVGFjdGljcyBUZWFtIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgXQorICAgICAgICAgICAgZ3VpYmFyCisgICAgICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkNhcHR1cmUiIFtjZ19tb2RlID0gImNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIkNhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJSZWdlbiBDYXB0dXJlIiBbY2dfbW9kZSA9ICJyZWdlbmNhcHR1cmUiOyBjZ19tb2RlX2xhYmVsID0gIlJlZ2VuIENhcHR1cmUiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJDVEYiIFtjZ19tb2RlID0gImN0ZiI7IGNnX21vZGVfbGFiZWwgPSAiQ2FwdHVyZSBUaGUgRmxhZyI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIkluc3RhZ2liIENURiIgW2NnX21vZGUgPSAiaW5zdGFjdGYiOyBjZ19tb2RlX2xhYmVsID0gIkluc3RhZ2liIENURiI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgICAgICBndWlidXR0b24gIlByb3RlY3QiIFtjZ19tb2RlID0gInByb3RlY3QiOyBjZ19tb2RlX2xhYmVsID0gIlByb3RlY3QiOyBzaG93Z3VpIGN1c3RvbWdhbWVdCisgICAgICAgICAgICAgICAgZ3VpYnV0dG9uICJIb2xkIiBbY2dfbW9kZSA9ICJob2xkIjsgY2dfbW9kZV9sYWJlbCA9ICJIb2xkIjsgc2hvd2d1aSBjdXN0b21nYW1lXQorICAgICAgICAgICAgICAgIGd1aWJ1dHRvbiAiQ29sbGVjdCIgW2NnX21vZGUgPSAiY29sbGVjdCI7IGNnX21vZGVfbGFiZWwgPSAiQ29sbGVjdCI7IHNob3dndWkgY3VzdG9tZ2FtZV0KKyAgICAgICAgICAgIF0KKyAgICAgICAgXQorICAgIF0gImdhbWUgbW9kZSIKKworICAgIG5ld2d1aSBjdXN0b21nYW1lbWFwcyBbCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGZmYW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRmZmFtYXBzOF0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFw \ No newline at end of file diff --git a/.github/native-small.03 b/.github/native-small.03 deleted file mode 100644 index 79892c4d..00000000 --- a/.github/native-small.03 +++ /dev/null @@ -1 +0,0 @@ -aXRlbXMgJGZmYW1hcHM5XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiZmZhIDQiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczEwXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkZmZhbWFwczExXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImNhcHR1cmUgMSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczJdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjYXB0dXJlbWFwczNdCisgICAgICAgIF0KKyAgICAgICAgZ3VpdGFiICJjYXB0dXJlIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM0XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM1XQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY2FwdHVyZW1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY2FwdHVyZSAzIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNhcHR1cmVtYXBzN10KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDEiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczFdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzMl0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHMzXQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDIiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczRdCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjdGZtYXBzNV0KKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGN0Zm1hcHM2XQorICAgICAgICBdCisgICAgICAgIGd1aXRhYiAiY3RmIDMiCisgICAgICAgIGd1aWxpc3QgWworICAgICAgICAgICAgZ3Vpc3RydXQgMTcgMQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkY3RmbWFwczddCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMV0KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgIm90aGVyIgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aXN0cnV0IDE3IDEKKyAgICAgICAgICAgIGd1aWxpc3QgW2d1aXN0cnV0IDE1IDE7IGdlbmNnbWFwaXRlbXMgJGNvbmNlcHRtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkc3BtYXBzXQorICAgICAgICAgICAgZ3VpbGlzdCBbZ3Vpc3RydXQgMTUgMTsgZ2VuY2dtYXBpdGVtcyAkcnBnbWFwc10KKyAgICAgICAgXQorICAgICAgICBndWl0YWIgImN1c3RvbSIKKyAgICAgICAgZ3VpbGlzdCBbCisgICAgICAgICAgICBndWlzdHJ1dCAxNyAxCisgICAgICAgICAgICBndWlsaXN0IFtndWlzdHJ1dCAxNSAxOyBnZW5jZ21hcGl0ZW1zICRjZ2N1c3RvbW1hcHNdCisgICAgICAgIF0KKyAgICBdICJjaG9vc2UgbWFwIgorCisgICAgbmV3Z3VpIGpvaW5wYXNzd29yZCBbCisgICAgICAgIGd1aXRleHQgKGNvbmNhdHdvcmQgIlBhc3N3b3JkIHJlcXVpcmVkIGZvciAiICRjZ19qb2luX3RhcmdldCkgMAorICAgICAgICBndWlmaWVsZCBjZ19qb2luX3Bhc3N3b3JkIDI4CisgICAgICAgIGd1aWJhcgorICAgICAgICBndWlsaXN0IFsKKyAgICAgICAgICAgIGd1aWJ1dHRvbiAiSm9pbiIgW2NsZWFyZ3VpIDE7IGpvaW4gJGNnX2pvaW5fdGFyZ2V0ICRjZ19qb2luX3Bhc3N3b3JkXSAiY3ViZSIKKyAgICAgICAgICAgIGd1aWJhcgorICAgICAgICAgICAgZ3VpYnV0dG9uICJDYW5jZWwiIFtjbGVhcmd1aSAxXSAiZXhpdCIKKyAgICAgICAgXQorICAgIF0gInBhc3N3b3JkIgorCiAgICAgbmV3Z3VpIGNvbnRlbnQgWwogICAgICAgICBndWlidXR0b24gIm1vZHMuLiIgICJzaG93Z3VpIG1vZHMiCiAgICAgICAgIGd1aWJ1dHRvbiAicHV0IG1vZHMgaW4gdXJsLi4iICBbanMgIk1vZHVsZS5hc3NldHMubW9kc1RvVVJMKCkiXQpAQCAtNTUzLDcgKzY4OSw3IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICAgICAgICBndWliYXIKICAgICAgIF0KICAgICAgIGd1aWJ1dHRvbiAic2VydmVyIGJyb3dzZXIuLiIgInNob3dndWkgaW50ZWdyYXRlZCIKLSAgICAgIGd1aWJ1dHRvbiAiY3JlYXRlIGN1c3RvbSBnYW1lLi4uIiBbanMgIk1vZHVsZS5jbHVzdGVyLm9wZW5DcmVhdGVHYW1lKCkiXQorICAgICAgZ3VpYnV0dG9uICJjcmVhdGUgY3VzdG9tIGdhbWUuLi4iIFtz \ No newline at end of file diff --git a/.github/native-small.04 b/.github/native-small.04 deleted file mode 100644 index ddab14bb..00000000 --- a/.github/native-small.04 +++ /dev/null @@ -1 +0,0 @@ -aG93Z3VpIGN1c3RvbWdhbWVdCiAgICAgICBndWlidXR0b24gInJhbmRvbSBtYXAuLiIgICJtYXAgcmFuZG9tIgogICAgICAgZ3VpYnV0dG9uICJjb250ZW50Li4iICJzaG93Z3VpIGNvbnRlbnQiCiAgICAgICBpZiAoJGZ1bGxzY3JlZW4pIFsKQEAgLTg2MSw0NyArOTk3LDU1IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICB9CiAKICAgICBNb2R1bGUuY2x1c3RlciA9IHsKLSAgICAgIG9wZW5DcmVhdGVHYW1lOiAoKSA9PiB7Ci0gICAgICAgIHNldENyZWF0ZUZvcm0oREVGQVVMVF9DUkVBVEVfRk9STSkKLSAgICAgICAgc2V0Q3JlYXRlR2FtZU9wZW4odHJ1ZSkKLSAgICAgIH0sCi0gICAgICBzdWJtaXRDcmVhdGVHYW1lOiAoZm9ybTogQ3JlYXRlR2FtZUZvcm0pID0+IHsKKyAgICAgIGNyZWF0ZUdhbWU6IChwcmVzZXQ6IHN0cmluZywgbW9kZTogc3RyaW5nKSA9PiB7CiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewotICAgICAgICAgIHNldENyZWF0ZUdhbWVCdXN5KHRydWUpCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChmb3JtLnZpc2liaWxpdHkgPT09ICdwYXNzd29yZCcgJiYgZm9ybS5wYXNzd29yZC50cmltKCkubGVuZ3RoIDwgMykgeworICAgICAgICAgICAgbGV0IGdhbWVNb2RlID0gbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScKKyAgICAgICAgICAgIGxldCBtYXAgPSAnY29tcGxleCcKKyAgICAgICAgICAgIGxldCB2aXNpYmlsaXR5ID0gJ3VubGlzdGVkJworICAgICAgICAgICAgbGV0IHBhc3N3b3JkID0gJycKKyAgICAgICAgICAgIGxldCBib3RzID0gMAorICAgICAgICAgICAgbGV0IHNraWxsID0gNzAKKyAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IDMwMAorCisgICAgICAgICAgICAvLyBOYXRpdmUgQ3ViZVNjcmlwdCBHVUkgc2VuZHMgb25lIGNvbXBhY3Qgc3BlYyB0aHJvdWdoIHRoZSBleGlzdGluZworICAgICAgICAgICAgLy8gZW5naW5lIGNyZWF0ZWdhbWUgY29tbWFuZC4gUGFyc2UgdmFsdWVzIGZyb20gdGhlIGVuZCBzbyBwYXNzd29yZHMKKyAgICAgICAgICAgIC8vIG1heSBjb250YWluIHRoZSBkZWxpbWl0ZXIgd2l0aG91dCBjb3JydXB0aW5nIHRoZSByZW1haW5pbmcgZmllbGRzLgorICAgICAgICAgICAgaWYgKHByZXNldC5pbmNsdWRlcygnfCcpKSB7CisgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gcHJlc2V0LnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgZ2FtZU1vZGUgPSBwYXJ0cy5zaGlmdCgpIHx8ICdmZmEnCisgICAgICAgICAgICAgIG1hcCA9IHBhcnRzLnNoaWZ0KCkgfHwgJ2NvbXBsZXgnCisgICAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlDb2RlID0gcGFydHMuc2hpZnQoKSB8fCAnMicKKyAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9IHZpc2liaWxpdHlDb2RlID09PSAnMCcgPyAncHVibGljJyA6IHZpc2liaWxpdHlDb2RlID09PSAnMScgPyAncGFzc3dvcmQnIDogJ3VubGlzdGVkJworICAgICAgICAgICAgICBkdXJhdGlvbiA9IE51bWJlcihwYXJ0cy5wb3AoKSB8fCAzMDApCisgICAgICAgICAgICAgIHNraWxsID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDcwKQorICAgICAgICAgICAgICBib3RzID0gTnVtYmVyKHBhcnRzLnBvcCgpIHx8IDApCisgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFydHMuam9pbignfCcpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2aXNpYmlsaXR5ID09PSAncGFzc3dvcmQnICYmIHBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMuJykKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBgJHtnYW1lTW9kZX0gb24gJHttYXB9YAogICAgICAgICAgICAgY29uc3QgYXJncyA9IFsKICAgICAgICAgICAgICAgJ2NyZWF0ZWdhbWUnLAotICAgICAgICAgICAgICBmb3JtLm1vZGUsCi0gICAgICAgICAgICAgIGZvcm0ubWFwLAotICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke2Zvcm0udmlzaWJpbGl0eX1gLAotICAgICAgICAgICAgICBgcGFzc3dvcmQ9JHtlbmNvZGVDb21tYW5kVmFsdWUoZm9ybS5wYXNzd29yZCl9YCwKLSAgICAgICAgICAgICAgYGJvdHM9JHtmb3JtLmJvdHN9YCwKLSAgICAgICAgICAgICAgYHNraWxsPSR7Zm9ybS5za2lsbH1gLAotICAgICAgICAgICAgICBgZHVyYXRpb249JHtmb3JtLmR1cmF0aW9ufWAsCi0gICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZShmb3JtLnRpdGxlKX1gLAorICAgICAgICAgICAgICBnYW1lTW9kZSwKKyAgICAgICAgICAgICAgbWFwLAorICAgICAgICAgICAgICBgdmlzaWJpbGl0eT0ke3Zpc2liaWxpdHl9YCwKKyAgICAgICAgICAgICAgYHBhc3N3b3JkPSR7ZW5jb2RlQ29tbWFuZFZhbHVlKHBhc3N3b3JkKX1gLAorICAgICAgICAgICAgICBgYm90cz0ke01hdGgubWF4KDAsIE1hdGgubWluKDEyLCBNYXRoLnRydW5jKGJvdHMpKSl9YCwKKyAgICAgICAgICAgICAgYHNraWxsPSR7TWF0aC5tYXgoMSwgTWF0aC5taW4oMTAxLCBNYXRoLnRydW5jKHNraWxsKSkpfWAsCisgICAgICAgICAgICAgIGBkdXJhdGlvbj0ke01hdGgubWF4KDE4MCwgTWF0aC5taW4oOTAwLCBNYXRoLnRydW5jKGR1cmF0aW9uKSkpfWAsCisgICAgICAgICAgICAgIGB0aXRsZT0ke2VuY29kZUNvbW1hbmRWYWx1ZSh0aXRsZSl9YCwKICAgICAgICAgICAgIF0KICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoYXJncy5qb2luKCcgJykpCi0gICAgICAgICAgICBzZXRDcmVhdGVHYW1lT3BlbihmYWxzZSkKICAgICAgICAgICAgIGxvZy5zdWNjZXNzKCdjdXN0b20gZ2FtZSBjcmVhdGVkOyBzaGFyZSB0aGUgVVJMIG9yIHJvb20gY29kZSB3aXRoIGZyaWVuZHMnKQogICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgIGxvZy5lcnJvcihgZmFpbGVkIHRvIGNyZWF0ZSBnYW1lOiAke2V9YCkKLSAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgc2V0 \ No newline at end of file diff --git a/.github/native-small.05 b/.github/native-small.05 deleted file mode 100644 index 83da9be8..00000000 --- a/.github/native-small.05 +++ /dev/null @@ -1 +0,0 @@ -Q3JlYXRlR2FtZUJ1c3koZmFsc2UpCiAgICAgICAgICAgfQogICAgICAgICB9KSgpCiAgICAgICB9LAotICAgICAgY3JlYXRlR2FtZTogKHByZXNldDogc3RyaW5nLCBtb2RlOiBzdHJpbmcpID0+IHsKLSAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uREVGQVVMVF9DUkVBVEVfRk9STSwgbW9kZTogbW9kZSB8fCBwcmVzZXQgfHwgJ2ZmYScgfQotICAgICAgICBNb2R1bGUuY2x1c3Rlci5zdWJtaXRDcmVhdGVHYW1lKG5leHQpCi0gICAgICB9LAotICAgICAgcHJvbXB0Sm9pbjogKG5hbWU6IHN0cmluZykgPT4gewotICAgICAgICBjb25zdCBwYXNzd29yZCA9IHdpbmRvdy5wcm9tcHQoYFBhc3N3b3JkIGZvciAke25hbWV9OmApCi0gICAgICAgIGlmIChwYXNzd29yZCA9PSBudWxsKSByZXR1cm4KLSAgICAgICAgTW9kdWxlLmNsdXN0ZXIuY29ubmVjdChuYW1lLCBwYXNzd29yZCkKLSAgICAgIH0sCiAgICAgICBjb25uZWN0OiAobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiB7CiAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5hbWUubGVuZ3RoID09PSAwID8gJ2ZmYScgOiBuYW1lCiAgICAgICAgIDsoYXN5bmMgKCkgPT4gewpAQCAtOTExLDcgKzEwNTUsOCBAQCBmdW5jdGlvbiBBcHAoKSB7CiAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlKQogICAgICAgICAgICAgaWYgKCFwYXNzd29yZCAmJiBtZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luY29ycmVjdCBwYXNzd29yZCcpKSB7Ci0gICAgICAgICAgICAgIE1vZHVsZS5jbHVzdGVyLnByb21wdEpvaW4odGFyZ2V0KQorICAgICAgICAgICAgICBjb25zdCBzYWZlVGFyZ2V0ID0gdGFyZ2V0LnJlcGxhY2UoL1teQS1aYS16MC05Xy1dL2csICcnKQorICAgICAgICAgICAgICBCYW5hbmFCcmVhZC5leGVjdXRlKGBjZ19qb2luX3RhcmdldCA9ICIke3NhZmVUYXJnZXR9IjsgY2dfam9pbl9wYXNzd29yZCA9ICIiOyBzaG93Z3VpIGpvaW5wYXNzd29yZGApCiAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9nLmVycm9yKGBmYWlsZWQgdG8gam9pbiAke3RhcmdldH06ICR7ZX1gKQpAQCAtMTAyNiw3ICsxMTcxLDcgQEAgZnVuY3Rpb24gQXBwKCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGJvdHMgPSBzLkJvdHMgPiAwID8gYCwgJHtzLkJvdHN9IGJvdCR7cy5Cb3RzID09PSAxID8gJycgOiAncyd9YCA6ICcnCiAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBgJHtsb2NrfSR7Y3VzdG9tfSR7cy5BbGlhc30gKF5mMiR7cy5OdW1DbGllbnRzfSBwbGF5ZXIke3MuTnVtQ2xpZW50cyA9PT0gMSA/ICcnIDogJ3MnfSR7Ym90c31eZjcpIC0gJHttb2RlTmFtZShzLk1vZGUpfSAke3MuTWFwfWAKICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBzLlBhc3N3b3JkCi0gICAgICAgICAgICAgICAgICA/IGBbanMgIk1vZHVsZS5jbHVzdGVyLnByb21wdEpvaW4oJyR7cy5BbGlhc30nKSJdYAorICAgICAgICAgICAgICAgICAgPyBgW2NnX2pvaW5fdGFyZ2V0ID0gXCIke3MuQWxpYXN9XCI7IGNnX2pvaW5fcGFzc3dvcmQgPSBcIlwiOyBzaG93Z3VpIGpvaW5wYXNzd29yZF1gCiAgICAgICAgICAgICAgICAgICA6IGBbam9pbiAke3MuQWxpYXN9XWAKICAgICAgICAgICAgICAgICByZXR1cm4gYGd1aWJ1dHRvbiAiJHtsYWJlbH0iICR7YWN0aW9ufWAKICAgICAgICAgICAgICAgfQpAQCAtMTIyMiw2NyArMTM2Nyw2IEBAIGZ1bmN0aW9uIEFwcCgpIHsKICAgICAgICAgICA8L0ZsZXg+CiAgICAgICAgIDwvRHJvcFRhcmdldD4KICAgICAgIDwvRmlsZURyb3BwZXI+Ci0gICAgICB7Y3JlYXRlR2FtZU9wZW4gJiYgKAotICAgICAgICA8TW9kYWxCYWNrZHJvcCBvbk1vdXNlRG93bj17KGV2ZW50KSA9PiB7Ci0gICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiAhY3JlYXRlR2FtZUJ1c3kpIHNldENyZWF0ZUdhbWVPcGVuKGZhbHNlKQotICAgICAgICB9fT4KLSAgICAgICAgICA8TW9kYWxDYXJkPgotICAgICAgICAgICAgPEhlYWRpbmcgc2l6ZT0ibWQiPkNyZWF0ZSBjdXN0b20gZ2FtZTwvSGVhZGluZz4KLSAgICAgICAgICAgIDxsYWJlbD5HYW1lIG5hbWU8L2xhYmVsPgotICAgICAgICAgICAgPGlucHV0IHZhbHVlPXtjcmVhdGVGb3JtLnRpdGxlfSBtYXhMZW5ndGg9ezQwfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCB0aXRsZTogZS50YXJnZXQudmFsdWUgfSl9IC8+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0icm93Ij4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8bGFiZWw+TW9kZTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT17Y3JlYXRlRm9ybS5tb2RlfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCBtb2RlOiBlLnRhcmdldC52YWx1ZSB9KX0+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmZmEiPkZyZWUgRm9yIEFsbDwvb3B0aW9uPgotICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaW5zdGEiPkluc3RhZ2liPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlZmZpYyI+RWZmaWNpZW5jeTwvb3B0aW9uPgotICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY3RmIj5DYXB0dXJlIHRoZSBGbGFnPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxsYWJlbD5NYXA8L2xhYmVsPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e2NyZWF0ZUZvcm0ubWFwfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCBtYXA6IGUudGFyZ2V0LnZhbHVlIH0pfT4KLSAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFs \ No newline at end of file diff --git a/.github/native-small.06 b/.github/native-small.06 deleted file mode 100644 index 518d8bec..00000000 --- a/.github/native-small.06 +++ /dev/null @@ -1 +0,0 @@ -dWU9ImNvbXBsZXgiPkNvbXBsZXg8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InR1cmJpbmUiPlR1cmJpbmU8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImR1c3QyIj5EdXN0IDI8L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxsYWJlbD5WaXNpYmlsaXR5PC9sYWJlbD4KLSAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e2NyZWF0ZUZvcm0udmlzaWJpbGl0eX0gb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVGb3JtKHsgLi4uY3JlYXRlRm9ybSwgdmlzaWJpbGl0eTogZS50YXJnZXQudmFsdWUgYXMgQ3JlYXRlR2FtZUZvcm1bJ3Zpc2liaWxpdHknXSB9KX0+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1YmxpYyI+UHVibGljIOKAlCBsaXN0ZWQgZm9yIGV2ZXJ5b25lPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InBhc3N3b3JkIj5QYXNzd29yZCBwcm90ZWN0ZWQg4oCUIGxpc3RlZCB3aXRoIGEgbG9jazwvb3B0aW9uPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1bmxpc3RlZCI+VW5saXN0ZWQg4oCUIGpvaW4gYnkgc2hhcmVkIFVSTC9jb2RlPC9vcHRpb24+Ci0gICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIHtjcmVhdGVGb3JtLnZpc2liaWxpdHkgPT09ICdwYXNzd29yZCcgJiYgKAotICAgICAgICAgICAgICA8PjxsYWJlbD5QYXNzd29yZDwvbGFiZWw+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZT17Y3JlYXRlRm9ybS5wYXNzd29yZH0gbWF4TGVuZ3RoPXs2NH0gb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVGb3JtKHsgLi4uY3JlYXRlRm9ybSwgcGFzc3dvcmQ6IGUudGFyZ2V0LnZhbHVlIH0pfSAvPjwvPgotICAgICAgICAgICAgKX0KLSAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJyb3ciPgotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIDxsYWJlbD5Cb3RzPC9sYWJlbD4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtjcmVhdGVGb3JtLmJvdHN9IG9uQ2hhbmdlPXsoZSkgPT4gc2V0Q3JlYXRlRm9ybSh7IC4uLmNyZWF0ZUZvcm0sIGJvdHM6IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfSl9PgotICAgICAgICAgICAgICAgICAge1swLCAxLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTJdLm1hcCgobikgPT4gPG9wdGlvbiBrZXk9e259IHZhbHVlPXtufT57bn08L29wdGlvbj4pfQotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICA8bGFiZWw+Qm90IHNraWxsPC9sYWJlbD4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtjcmVhdGVGb3JtLnNraWxsfSBvbkNoYW5nZT17KGUpID0+IHNldENyZWF0ZUZvcm0oeyAuLi5jcmVhdGVGb3JtLCBza2lsbDogTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB9KX0+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXs0NX0+RWFzeTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ezY1fT5Ob3JtYWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXs4MH0+SGFyZDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ezk1fT5CcnV0YWw8L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxsYWJlbD5Sb3VuZCBsZW5ndGg8L2xhYmVsPgotICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT17Y3JlYXRlRm9ybS5kdXJhdGlvbn0gb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVGb3JtKHsgLi4uY3JlYXRlRm9ybSwgZHVyYXRpb246IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfSl9PgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXsxODB9PjMgbWludXRlczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ezMwMH0+NSBtaW51dGVzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT17NDgwfT44IG1pbnV0ZXM8L29wdGlvbj48b3B0aW9uIHZhbHVlPXs2MDB9PjEwIG1pbnV0ZXM8L29wdGlvbj4KLSAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImFjdGlvbnMiPgotICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0ic2Vjb25kYXJ5IiBkaXNhYmxlZD17Y3JlYXRlR2FtZUJ1c3l9IG9uQ2xpY2s9eygpID0+IHNldENyZWF0ZUdhbWVPcGVuKGZhbHNlKX0+Q2FuY2VsPC9idXR0b24+Ci0gICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSJwcmltYXJ5IiBkaXNhYmxlZD17Y3JlYXRlR2FtZUJ1c3l9IG9uQ2xpY2s9eygpID0+IE1vZHVsZS5jbHVzdGVyLnN1Ym1pdENyZWF0ZUdhbWUoY3JlYXRlRm9ybSl9PntjcmVhdGVHYW1lQnVzeSA/ICdDcmVhdGluZ+KApicgOiAnQ3JlYXRlIGdhbWUnfTwvYnV0dG9uPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgPC9Nb2RhbENhcmQ+Ci0gICAgICAgIDwvTW9kYWxCYWNrZHJvcD4KLSAgICAgICl9CiAgICAgPC9PdXRlckNvbnRhaW5lcj4KICAgKQogfQpkaWZmIC0tZ2l0IGEvcGtnL2dhbWUvcHJvdG9jb2wvcGh5c2ljcy5nbyBiL3BrZy9nYW1lL3Byb3RvY29sL3BoeXNpY3MuZ28KaW5kZXggYjc5MjVkNS4uY2IxZDhiZCAxMDA2NDQKLS0tIGEvcGtnL2dhbWUvcHJvdG9jb2wvcGh5c2ljcy5nbworKysgYi9wa2cvZ2FtZS9wcm90b2NvbC9waHlzaWNzLmdvCkBAIC0xLDYgKzEsNyBAQAogcGFja2FnZSBwcm90b2NvbAogCiBpbXBvcnQgKAorCSJmbXQiCiAJIm1hdGgiCiAKIAkiZ2l0aHViLmNvbS9jZm91c3Qvc291ci9wa2cvZ2FtZS9jb25zdGFudHMiCkBAIC0zMzAsMyArMzMxLDI0IEBAIGZ1bmMgKHN0YXRlIFBoeXNpY3NTdGF0ZSkgTWFyc2hhbChwICppby5QYWNrZXQpIGVycm9yIHsKIAogdmFyIF8gaW8uTWFyc2hhbGFibGUgPSAoKlBoeXNpY3NTdGF0ZSkobmlsKQogdmFyIF8g \ No newline at end of file diff --git a/.github/native-small.07 b/.github/native-small.07 deleted file mode 100644 index 8e275450..00000000 --- a/.github/native-small.07 +++ /dev/null @@ -1 +0,0 @@ -aW8uVW5tYXJzaGFsYWJsZSA9ICgqUGh5c2ljc1N0YXRlKShuaWwpCisKKy8vIFBvcyB1c2VzIFNhdWVyYnJhdGVuJ3MgY29tcGFjdCB1bnNpZ25lZCBpbnRlZ2VyIGVuY29kaW5nIGZvciB0aGUgY2xpZW50CisvLyBudW1iZXIuIFRoZSBnZW5lcmljIHJlZmxlY3Rpb24gZGVjb2RlciB1c2VzIHNpZ25lZCBwdXRpbnQvZ2V0aW50IGZvciBpbnQzMiwKKy8vIHdoaWNoIGhhcHBlbnMgdG8gd29yayBmb3IgaHVtYW4gY2xpZW50IG51bWJlcnMgYmVsb3cgMTI4IGJ1dCBjb3JydXB0cyB0aGUKKy8vIHBhY2tldCBzdHJlYW0gZm9yIEFJIGNsaWVudCBudW1iZXJzICgxMjgrKS4KK2Z1bmMgKG0gUG9zKSBNYXJzaGFsKHAgKmlvLlBhY2tldCkgZXJyb3IgeworCXAuUHV0VWludCh1aW50MzIobS5DbGllbnQpKQorCXJldHVybiBtLlN0YXRlLk1hcnNoYWwocCkKK30KKworZnVuYyAobSAqUG9zKSBVbm1hcnNoYWwocCAqaW8uUGFja2V0KSBlcnJvciB7CisJY2xpZW50LCBvayA6PSBwLkdldFVpbnQoKQorCWlmICFvayB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJlcnJvciByZWFkaW5nIGNsaWVudCBudW1iZXIiKQorCX0KKwltLkNsaWVudCA9IGludDMyKGNsaWVudCkKKwlyZXR1cm4gbS5TdGF0ZS5Vbm1hcnNoYWwocCkKK30KKwordmFyIF8gaW8uTWFyc2hhbGFibGUgPSBQb3N7fQordmFyIF8gaW8uVW5tYXJzaGFsYWJsZSA9ICgqUG9zKShuaWwpCg== \ No newline at end of file diff --git a/.github/workflows/apply-native-fix.yml b/.github/workflows/apply-native-fix.yml deleted file mode 100644 index 6f7be3c8..00000000 --- a/.github/workflows/apply-native-fix.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Apply native custom game fix - -on: - push: - branches: - - agent/fix-native-custom-games - paths: - - .github/workflows/apply-native-fix.yml - -permissions: - contents: write - -jobs: - apply: - runs-on: ubuntu-latest - steps: - - name: Check out repair branch - uses: actions/checkout@v4 - with: - ref: agent/fix-native-custom-games - fetch-depth: 0 - - - name: Reconstruct and verify patch - shell: bash - run: | - set -euo pipefail - cat .github/native-small.* > /tmp/native-fix.patch.b64 - base64 --decode /tmp/native-fix.patch.b64 > /tmp/native-fix.patch - echo "eb4498070eb9f6832d54b3153ee6388abf1c98857f620caf7b63c178b26b46b9 /tmp/native-fix.patch" | sha256sum --check --strict - git apply --check /tmp/native-fix.patch - git apply /tmp/native-fix.patch - - - name: Format and validate repair - shell: bash - run: | - set -euo pipefail - gofmt -w pkg/game/protocol/physics.go pkg/game/protocol/pos_test.go - git diff --check - if grep -RInE 'ModalBackdrop|ModalCard|createGameOpen|window\.prompt|promptJoin' client/src/index.tsx client/definitions/global.d.ts; then - echo "Browser overlay or prompt code remains" >&2 - exit 1 - fi - grep -q 'newgui customgame' client/src/index.tsx - grep -q 'newgui customgamemaps' client/src/index.tsx - grep -q 'GetUint()' pkg/game/protocol/physics.go - go test ./pkg/game/protocol - - - name: Remove temporary staging files - shell: bash - run: | - rm -f .github/native-small.* - rm -f .github/workflows/apply-native-fix.yml - rm -f .github/workflows/export-fix-source.yml - - - name: Commit repair - shell: bash - run: | - set -euo pipefail - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add -A - git commit -m "Replace custom-game overlay and fix bot packet decoding" - git push origin HEAD:agent/fix-native-custom-games diff --git a/.github/workflows/export-fix-source.yml b/.github/workflows/export-fix-source.yml deleted file mode 100644 index 83049351..00000000 --- a/.github/workflows/export-fix-source.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Export fix source - -on: - push: - branches: - - agent/fix-native-custom-games - pull_request: - branches: - - main - workflow_dispatch: - -permissions: - contents: read - -jobs: - export: - runs-on: ubuntu-latest - steps: - - name: Check out source - uses: actions/checkout@v4 - with: - lfs: true - - name: Create source archive - run: | - mkdir -p .tmp - tar --exclude=.git --exclude=.tmp --exclude=.github/workflows/export-fix-source.yml -czf .tmp/void-arena-fix-source.tar.gz . - - name: Upload source archive - uses: actions/upload-artifact@v4 - with: - name: void-arena-fix-source-${{ github.sha }} - path: .tmp/void-arena-fix-source.tar.gz - retention-days: 1 diff --git a/client/definitions/global.d.ts b/client/definitions/global.d.ts index 157cf587..7cdc59dc 100644 --- a/client/definitions/global.d.ts +++ b/client/definitions/global.d.ts @@ -110,19 +110,7 @@ type ModuleType = { } cluster: { - openCreateGame: () => void - submitCreateGame: (form: { - title: string - mode: string - map: string - visibility: 'public' | 'password' | 'unlisted' - password: string - bots: number - skill: number - duration: number - }) => void createGame: (preset: string, mode: string) => void - promptJoin: (name: string) => void connect: (name: string, password: string) => void send: (channel: number, dataPtr: number, dataLength: number) => void receive: (dataPtr: number, dataLengthPtr: number) => void diff --git a/client/src/index.tsx b/client/src/index.tsx index c9ea4ce9..034cada1 100644 --- a/client/src/index.tsx +++ b/client/src/index.tsx @@ -8,13 +8,11 @@ import ReactDOM from 'react-dom' import { Center, ChakraProvider, - Button, extendTheme, Flex, Box, VStack, Heading, - Spacer, } from '@chakra-ui/react' import type { ThemeConfig } from '@chakra-ui/react' @@ -98,67 +96,6 @@ const DropTarget = styled.div` z-index: 2; ` -const ModalBackdrop = styled.div` - position: fixed; - inset: 0; - z-index: 20; - display: flex; - align-items: center; - justify-content: center; - background: rgba(0, 0, 0, 0.76); - pointer-events: auto; -` - -const ModalCard = styled.div` - width: min(92vw, 520px); - max-height: 88vh; - overflow-y: auto; - padding: 24px; - border: 1px solid rgba(255, 255, 255, 0.22); - border-radius: 10px; - background: #101318; - color: #fff; - box-shadow: 0 24px 80px rgba(0, 0, 0, 0.55); - - label { display: block; margin: 14px 0 6px; font-size: 13px; color: #cbd5e0; } - input, select { - width: 100%; - padding: 10px 12px; - border: 1px solid #3b4250; - border-radius: 6px; - background: #191e27; - color: #fff; - } - .row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } - .actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 22px; } - button { padding: 10px 16px; border-radius: 6px; border: 0; cursor: pointer; } - button.primary { background: #e8edf5; color: #111827; font-weight: 700; } - button.secondary { background: #2a303b; color: #fff; } - button:disabled { opacity: 0.55; cursor: wait; } -` - -type CreateGameForm = { - title: string - mode: string - map: string - visibility: 'public' | 'password' | 'unlisted' - password: string - bots: number - skill: number - duration: number -} - -const DEFAULT_CREATE_FORM: CreateGameForm = { - title: 'Custom Match', - mode: 'ffa', - map: 'complex', - visibility: 'unlisted', - password: '', - bots: 0, - skill: 70, - duration: 300, -} - const encodeCommandValue = (value: string): string => { const bytes = new TextEncoder().encode(value) let binary = '' @@ -303,9 +240,6 @@ function App() { }, }) - const [createGameOpen, setCreateGameOpen] = React.useState(false) - const [createGameBusy, setCreateGameBusy] = React.useState(false) - const [createForm, setCreateForm] = React.useState(DEFAULT_CREATE_FORM) const internalServersRef = React.useRef(`newgui integrated [ guitab "servers" @@ -517,6 +451,208 @@ function App() { // ${renderDiscordButton(authState)} const menu = ` + // Native Sauerbraten custom-game menus. These deliberately live inside the + // engine GUI so cursor locking, keyboard focus, ESC, and styling all behave + // exactly like the rest of the game. + cg_mode = "ffa" + cg_mode_label = "Free For All" + cg_map = "complex" + cg_visibility = 2 + cg_password = "" + cg_bots = 0 + cg_skill = 70 + cg_duration = 300 + cg_join_target = "" + cg_join_password = "" + + cgselectmap = [ + cg_map = $arg1 + showgui customgame + ] + + gencgmapitems = [ + looplist curmap $arg1 [ + guibutton $curmap (concatword "cgselectmap " $curmap) "cube" + ] + ] + + buildcgcustommaps = [ + cgcustommaps = "" + loopfiles curmap "packages/base" "ogz" [ + if (< (indexof $allmaps $curmap) 0) [ + cgcustommaps = (concat $cgcustommaps (escape $curmap)) + ] + ] + cgcustommaps = (sortlist $cgcustommaps x y [naturalsort $x $y]) + ] + + cgcreate = [ + if (&& (= $cg_visibility 1) (< (strlen $cg_password) 3)) [ + echo "^f3Password must be at least 3 characters." + ] [ + cleargui 1 + creategame (concatword $cg_mode "|" $cg_map "|" $cg_visibility "|" $cg_password "|" $cg_bots "|" $cg_skill "|" $cg_duration) "" + ] + ] + + newgui customgame [ + guitext "Create Custom Game" 0 + guibar + guilist [ + guilist [ + guitext "Mode" 0 + guibutton (concatword " " $cg_mode_label) [showgui customgamemode] "cube" + guitext "Map" 0 + guibutton (concatword " " $cg_map) [buildcgcustommaps; showgui customgamemaps] "cube" + guitext "Visibility" 0 + guiradio "Public - listed for everyone" cg_visibility 0 + guiradio "Password protected - listed with a lock" cg_visibility 1 + guiradio "Unlisted - join by URL or room code" cg_visibility 2 + if (= $cg_visibility 1) [ + guitext "Password" 0 + guifield cg_password 28 + ] + ] + guibar + guilist [ + guitext (concatword "Bots: " $cg_bots) 0 + guislider cg_bots 0 12 + guitext (concatword "Bot skill: " $cg_skill) 0 + guislider cg_skill 1 101 + guitext (concatword "Round length: " $cg_duration " seconds") 0 + guislider cg_duration 180 900 + guistrut 1 + guiimage (concatword "packages/base/" $cg_map ".jpg") [] 4 1 "data/cube.png" $cg_map + ] + ] + guibar + guilist [ + guibutton "Create game" [cgcreate] "cube" + guibar + guibutton "Cancel" [cleargui 1] "exit" + ] + ] "custom game" + + newgui customgamemode [ + guilist [ + guilist [ + guibutton "Free For All" [cg_mode = "ffa"; cg_mode_label = "Free For All"; showgui customgame] + guibutton "Teamplay" [cg_mode = "teamplay"; cg_mode_label = "Teamplay"; showgui customgame] + guibutton "Instagib" [cg_mode = "insta"; cg_mode_label = "Instagib"; showgui customgame] + guibutton "Instagib Team" [cg_mode = "instateam"; cg_mode_label = "Instagib Team"; showgui customgame] + guibutton "Efficiency" [cg_mode = "effic"; cg_mode_label = "Efficiency"; showgui customgame] + guibutton "Efficiency Team" [cg_mode = "efficteam"; cg_mode_label = "Efficiency Team"; showgui customgame] + guibutton "Tactics" [cg_mode = "tac"; cg_mode_label = "Tactics"; showgui customgame] + guibutton "Tactics Team" [cg_mode = "tacteam"; cg_mode_label = "Tactics Team"; showgui customgame] + ] + guibar + guilist [ + guibutton "Capture" [cg_mode = "capture"; cg_mode_label = "Capture"; showgui customgame] + guibutton "Regen Capture" [cg_mode = "regencapture"; cg_mode_label = "Regen Capture"; showgui customgame] + guibutton "CTF" [cg_mode = "ctf"; cg_mode_label = "Capture The Flag"; showgui customgame] + guibutton "Instagib CTF" [cg_mode = "instactf"; cg_mode_label = "Instagib CTF"; showgui customgame] + guibutton "Protect" [cg_mode = "protect"; cg_mode_label = "Protect"; showgui customgame] + guibutton "Hold" [cg_mode = "hold"; cg_mode_label = "Hold"; showgui customgame] + guibutton "Collect" [cg_mode = "collect"; cg_mode_label = "Collect"; showgui customgame] + ] + ] + ] "game mode" + + newgui customgamemaps [ + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ffamaps1] + guilist [guistrut 15 1; gencgmapitems $ffamaps2] + guilist [guistrut 15 1; gencgmapitems $ffamaps3] + ] + guitab "ffa 2" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ffamaps4] + guilist [guistrut 15 1; gencgmapitems $ffamaps5] + guilist [guistrut 15 1; gencgmapitems $ffamaps6] + ] + guitab "ffa 3" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ffamaps7] + guilist [guistrut 15 1; gencgmapitems $ffamaps8] + guilist [guistrut 15 1; gencgmapitems $ffamaps9] + ] + guitab "ffa 4" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ffamaps10] + guilist [guistrut 15 1; gencgmapitems $ffamaps11] + guilist [guistrut 15 1] + ] + guitab "capture 1" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $capturemaps1] + guilist [guistrut 15 1; gencgmapitems $capturemaps2] + guilist [guistrut 15 1; gencgmapitems $capturemaps3] + ] + guitab "capture 2" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $capturemaps4] + guilist [guistrut 15 1; gencgmapitems $capturemaps5] + guilist [guistrut 15 1; gencgmapitems $capturemaps6] + ] + guitab "capture 3" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $capturemaps7] + guilist [guistrut 15 1] + guilist [guistrut 15 1] + ] + guitab "ctf 1" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ctfmaps1] + guilist [guistrut 15 1; gencgmapitems $ctfmaps2] + guilist [guistrut 15 1; gencgmapitems $ctfmaps3] + ] + guitab "ctf 2" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ctfmaps4] + guilist [guistrut 15 1; gencgmapitems $ctfmaps5] + guilist [guistrut 15 1; gencgmapitems $ctfmaps6] + ] + guitab "ctf 3" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $ctfmaps7] + guilist [guistrut 15 1] + guilist [guistrut 15 1] + ] + guitab "other" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $conceptmaps] + guilist [guistrut 15 1; gencgmapitems $spmaps] + guilist [guistrut 15 1; gencgmapitems $rpgmaps] + ] + guitab "custom" + guilist [ + guistrut 17 1 + guilist [guistrut 15 1; gencgmapitems $cgcustommaps] + ] + ] "choose map" + + newgui joinpassword [ + guitext (concatword "Password required for " $cg_join_target) 0 + guifield cg_join_password 28 + guibar + guilist [ + guibutton "Join" [cleargui 1; join $cg_join_target $cg_join_password] "cube" + guibar + guibutton "Cancel" [cleargui 1] "exit" + ] + ] "password" + newgui content [ guibutton "mods.." "showgui mods" guibutton "put mods in url.." [js "Module.assets.modsToURL()"] @@ -553,7 +689,7 @@ function App() { guibar ] guibutton "server browser.." "showgui integrated" - guibutton "create custom game..." [js "Module.cluster.openCreateGame()"] + guibutton "create custom game..." [showgui customgame] guibutton "random map.." "map random" guibutton "content.." "showgui content" if ($fullscreen) [ @@ -861,47 +997,55 @@ function App() { } Module.cluster = { - openCreateGame: () => { - setCreateForm(DEFAULT_CREATE_FORM) - setCreateGameOpen(true) - }, - submitCreateGame: (form: CreateGameForm) => { + createGame: (preset: string, mode: string) => { ;(async () => { - setCreateGameBusy(true) try { - if (form.visibility === 'password' && form.password.trim().length < 3) { + let gameMode = mode || preset || 'ffa' + let map = 'complex' + let visibility = 'unlisted' + let password = '' + let bots = 0 + let skill = 70 + let duration = 300 + + // Native CubeScript GUI sends one compact spec through the existing + // engine creategame command. Parse values from the end so passwords + // may contain the delimiter without corrupting the remaining fields. + if (preset.includes('|')) { + const parts = preset.split('|') + gameMode = parts.shift() || 'ffa' + map = parts.shift() || 'complex' + const visibilityCode = parts.shift() || '2' + visibility = visibilityCode === '0' ? 'public' : visibilityCode === '1' ? 'password' : 'unlisted' + duration = Number(parts.pop() || 300) + skill = Number(parts.pop() || 70) + bots = Number(parts.pop() || 0) + password = parts.join('|') + } + + if (visibility === 'password' && password.trim().length < 3) { throw new Error('Password must be at least 3 characters.') } + + const title = `${gameMode} on ${map}` const args = [ 'creategame', - form.mode, - form.map, - `visibility=${form.visibility}`, - `password=${encodeCommandValue(form.password)}`, - `bots=${form.bots}`, - `skill=${form.skill}`, - `duration=${form.duration}`, - `title=${encodeCommandValue(form.title)}`, + gameMode, + map, + `visibility=${visibility}`, + `password=${encodeCommandValue(password)}`, + `bots=${Math.max(0, Math.min(12, Math.trunc(bots)))}`, + `skill=${Math.max(1, Math.min(101, Math.trunc(skill)))}`, + `duration=${Math.max(180, Math.min(900, Math.trunc(duration)))}`, + `title=${encodeCommandValue(title)}`, ] await runCommand(args.join(' ')) - setCreateGameOpen(false) log.success('custom game created; share the URL or room code with friends') } catch (e) { log.error(`failed to create game: ${e}`) - } finally { - setCreateGameBusy(false) } })() }, - createGame: (preset: string, mode: string) => { - const next = { ...DEFAULT_CREATE_FORM, mode: mode || preset || 'ffa' } - Module.cluster.submitCreateGame(next) - }, - promptJoin: (name: string) => { - const password = window.prompt(`Password for ${name}:`) - if (password == null) return - Module.cluster.connect(name, password) - }, connect: (name: string, password: string) => { const target = name.length === 0 ? 'ffa' : name ;(async () => { @@ -911,7 +1055,8 @@ function App() { } catch (e) { const message = String(e) if (!password && message.toLowerCase().includes('incorrect password')) { - Module.cluster.promptJoin(target) + const safeTarget = target.replace(/[^A-Za-z0-9_-]/g, '') + BananaBread.execute(`cg_join_target = "${safeTarget}"; cg_join_password = ""; showgui joinpassword`) return } log.error(`failed to join ${target}: ${e}`) @@ -1026,7 +1171,7 @@ function App() { const bots = s.Bots > 0 ? `, ${s.Bots} bot${s.Bots === 1 ? '' : 's'}` : '' const label = `${lock}${custom}${s.Alias} (^f2${s.NumClients} player${s.NumClients === 1 ? '' : 's'}${bots}^f7) - ${modeName(s.Mode)} ${s.Map}` const action = s.Password - ? `[js "Module.cluster.promptJoin('${s.Alias}')"]` + ? `[cg_join_target = \"${s.Alias}\"; cg_join_password = \"\"; showgui joinpassword]` : `[join ${s.Alias}]` return `guibutton "${label}" ${action}` } @@ -1222,67 +1367,6 @@ function App() { - {createGameOpen && ( - { - if (event.target === event.currentTarget && !createGameBusy) setCreateGameOpen(false) - }}> - - Create custom game - - setCreateForm({ ...createForm, title: e.target.value })} /> -
-
- - -
-
- - -
-
- - - {createForm.visibility === 'password' && ( - <> setCreateForm({ ...createForm, password: e.target.value })} /> - )} -
-
- - -
-
- - -
-
- - -
- - -
-
-
- )} ) } diff --git a/pkg/game/protocol/physics.go b/pkg/game/protocol/physics.go index b7925d56..cb1d8bdc 100644 --- a/pkg/game/protocol/physics.go +++ b/pkg/game/protocol/physics.go @@ -1,6 +1,7 @@ package protocol import ( + "fmt" "math" "github.com/cfoust/sour/pkg/game/constants" @@ -330,3 +331,24 @@ func (state PhysicsState) Marshal(p *io.Packet) error { var _ io.Marshalable = (*PhysicsState)(nil) var _ io.Unmarshalable = (*PhysicsState)(nil) + +// Pos uses Sauerbraten's compact unsigned integer encoding for the client +// number. The generic reflection decoder uses signed putint/getint for int32, +// which happens to work for human client numbers below 128 but corrupts the +// packet stream for AI client numbers (128+). +func (m Pos) Marshal(p *io.Packet) error { + p.PutUint(uint32(m.Client)) + return m.State.Marshal(p) +} + +func (m *Pos) Unmarshal(p *io.Packet) error { + client, ok := p.GetUint() + if !ok { + return fmt.Errorf("error reading client number") + } + m.Client = int32(client) + return m.State.Unmarshal(p) +} + +var _ io.Marshalable = Pos{} +var _ io.Unmarshalable = (*Pos)(nil) From fe3cfa8d6dc5ffd9fc69e77020bcc39bb0c32c64 Mon Sep 17 00:00:00 2001 From: Atchbo <86882671+Atchbo2001@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:11:05 -0500 Subject: [PATCH 17/17] Document bot packet boundary regression --- pkg/game/protocol/pos_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/game/protocol/pos_test.go b/pkg/game/protocol/pos_test.go index 20714cab..30eaec7a 100644 --- a/pkg/game/protocol/pos_test.go +++ b/pkg/game/protocol/pos_test.go @@ -6,6 +6,7 @@ import ( gameio "github.com/cfoust/sour/pkg/game/io" ) +// This guards the exact client-number boundary that corrupted bot traffic. func TestBotPositionUsesUnsignedClientNumber(t *testing.T) { state := PhysicsState{ State: 4,