From 820eda3e45b8130b99d141e9a80a18552309f505 Mon Sep 17 00:00:00 2001 From: sai Date: Fri, 10 May 2024 14:44:55 +0530 Subject: [PATCH] Solution Solved --- .../asa_vault/AsaVault.approval.teal | 93 ++++++++++++++----- .../artifacts/asa_vault/AsaVault.arc32.json | 2 +- .../artifacts/asa_vault/client.py | 2 +- .../smart_contracts/asa_vault/contract.py | 12 ++- 4 files changed, 80 insertions(+), 29 deletions(-) diff --git a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal index 0ff937f..2144a6d 100644 --- a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal +++ b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal @@ -59,7 +59,7 @@ main_opt_in_to_asset_route@2: return main_deposit_asa_route@3: - // smart_contracts/asa_vault/contract.py:25 + // smart_contracts/asa_vault/contract.py:32 // @arc4.abimethod txn OnCompletion ! @@ -76,14 +76,14 @@ main_deposit_asa_route@3: int axfer == assert // transaction type is axfer - // smart_contracts/asa_vault/contract.py:25 + // smart_contracts/asa_vault/contract.py:32 // @arc4.abimethod callsub deposit_asa int 1 return main_withdraw_asa_route@4: - // smart_contracts/asa_vault/contract.py:33 + // smart_contracts/asa_vault/contract.py:40 // @arc4.abimethod txn OnCompletion ! @@ -95,14 +95,14 @@ main_withdraw_asa_route@4: txna ApplicationArgs 1 btoi txnas Assets - // smart_contracts/asa_vault/contract.py:33 + // smart_contracts/asa_vault/contract.py:40 // @arc4.abimethod callsub withdraw_asa int 1 return main_get_asa_balance_route@5: - // smart_contracts/asa_vault/contract.py:47 + // smart_contracts/asa_vault/contract.py:54 // @arc4.abimethod(readonly=True) txn OnCompletion ! @@ -159,14 +159,59 @@ opt_in_to_asset: bury 1 ! assert + // smart_contracts/asa_vault/contract.py:21-27 + // itxn.AssetTransfer( + // xfer_asset=self.asset_id, + // asset_receiver=Global.current_application_address, + // sender=Global.current_application_address, + // asset_amount=0, + // fee=0, + // ).submit() + itxn_begin // smart_contracts/asa_vault/contract.py:22 + // xfer_asset=self.asset_id, + int 0 + byte "asset_id" + app_global_get_ex + assert // check asset_id exists + // smart_contracts/asa_vault/contract.py:23 + // asset_receiver=Global.current_application_address, + global CurrentApplicationAddress + // smart_contracts/asa_vault/contract.py:24 + // sender=Global.current_application_address, + dup + // smart_contracts/asa_vault/contract.py:26 + // fee=0, + int 0 + itxn_field Fee + // smart_contracts/asa_vault/contract.py:25 + // asset_amount=0, + int 0 + itxn_field AssetAmount + itxn_field Sender + itxn_field AssetReceiver + itxn_field XferAsset + // smart_contracts/asa_vault/contract.py:21 + // itxn.AssetTransfer( + int axfer + itxn_field TypeEnum + // smart_contracts/asa_vault/contract.py:21-27 + // itxn.AssetTransfer( + // xfer_asset=self.asset_id, + // asset_receiver=Global.current_application_address, + // sender=Global.current_application_address, + // asset_amount=0, + // fee=0, + // ).submit() + itxn_submit + // smart_contracts/asa_vault/contract.py:29 // assert mbr_pay.receiver == Global.current_application_address frame_dig -1 gtxns Receiver global CurrentApplicationAddress == assert - // smart_contracts/asa_vault/contract.py:23 + // smart_contracts/asa_vault/contract.py:30 // assert mbr_pay.amount == Global.min_balance + Global.asset_opt_in_min_balance frame_dig -1 gtxns Amount @@ -195,27 +240,27 @@ authorize_creator: // smart_contracts.asa_vault.contract.AsaVault.deposit_asa(deposit_txn: uint64) -> void: deposit_asa: - // smart_contracts/asa_vault/contract.py:25-26 + // smart_contracts/asa_vault/contract.py:32-33 // @arc4.abimethod // def deposit_asa(self, deposit_txn: gtxn.AssetTransferTransaction)-> None: proto 1 0 - // smart_contracts/asa_vault/contract.py:27 + // smart_contracts/asa_vault/contract.py:34 // self.authorize_creator() callsub authorize_creator - // smart_contracts/asa_vault/contract.py:28 + // smart_contracts/asa_vault/contract.py:35 // assert deposit_txn.asset_receiver == Global.current_application_address frame_dig -1 gtxns AssetReceiver global CurrentApplicationAddress == assert - // smart_contracts/asa_vault/contract.py:29 + // smart_contracts/asa_vault/contract.py:36 // assert deposit_txn.asset_amount > 0 frame_dig -1 gtxns AssetAmount dup assert - // smart_contracts/asa_vault/contract.py:31 + // smart_contracts/asa_vault/contract.py:38 // self.asa_balance += deposit_txn.asset_amount int 0 byte "asa_balance" @@ -230,14 +275,14 @@ deposit_asa: // smart_contracts.asa_vault.contract.AsaVault.withdraw_asa(asset: uint64) -> void: withdraw_asa: - // smart_contracts/asa_vault/contract.py:33-34 + // smart_contracts/asa_vault/contract.py:40-41 // @arc4.abimethod // def withdraw_asa(self, asset: Asset) -> None: proto 1 0 - // smart_contracts/asa_vault/contract.py:35 + // smart_contracts/asa_vault/contract.py:42 // self.authorize_creator() callsub authorize_creator - // smart_contracts/asa_vault/contract.py:37-43 + // smart_contracts/asa_vault/contract.py:44-50 // itxn.AssetTransfer( // xfer_asset=self.asset_id, // asset_receiver=Global.creator_address, @@ -246,34 +291,34 @@ withdraw_asa: // fee=0, // ).submit() itxn_begin - // smart_contracts/asa_vault/contract.py:38 + // smart_contracts/asa_vault/contract.py:45 // xfer_asset=self.asset_id, int 0 byte "asset_id" app_global_get_ex assert // check asset_id exists - // smart_contracts/asa_vault/contract.py:39 + // smart_contracts/asa_vault/contract.py:46 // asset_receiver=Global.creator_address, global CreatorAddress - // smart_contracts/asa_vault/contract.py:41 + // smart_contracts/asa_vault/contract.py:48 // asset_close_to=Global.creator_address, dup - // smart_contracts/asa_vault/contract.py:42 + // smart_contracts/asa_vault/contract.py:49 // fee=0, int 0 itxn_field Fee itxn_field AssetCloseTo - // smart_contracts/asa_vault/contract.py:40 + // smart_contracts/asa_vault/contract.py:47 // asset_amount=0, int 0 itxn_field AssetAmount itxn_field AssetReceiver itxn_field XferAsset - // smart_contracts/asa_vault/contract.py:37 + // smart_contracts/asa_vault/contract.py:44 // itxn.AssetTransfer( int axfer itxn_field TypeEnum - // smart_contracts/asa_vault/contract.py:37-43 + // smart_contracts/asa_vault/contract.py:44-50 // itxn.AssetTransfer( // xfer_asset=self.asset_id, // asset_receiver=Global.creator_address, @@ -282,7 +327,7 @@ withdraw_asa: // fee=0, // ).submit() itxn_submit - // smart_contracts/asa_vault/contract.py:45 + // smart_contracts/asa_vault/contract.py:52 // self.asa_balance = UInt64(0) byte "asa_balance" int 0 @@ -292,11 +337,11 @@ withdraw_asa: // smart_contracts.asa_vault.contract.AsaVault.get_asa_balance() -> uint64: get_asa_balance: - // smart_contracts/asa_vault/contract.py:47-48 + // smart_contracts/asa_vault/contract.py:54-55 // @arc4.abimethod(readonly=True) // def get_asa_balance(self) -> UInt64: proto 0 1 - // smart_contracts/asa_vault/contract.py:49 + // smart_contracts/asa_vault/contract.py:56 // return self.asa_balance int 0 byte "asa_balance" diff --git a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json index e5eb6c1..8cd2896 100644 --- a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json +++ b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json @@ -28,7 +28,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjgKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzEKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMy0zNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNQogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM3LTQzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzgKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM5CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNy00MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NQogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIxLTI3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICBpbnQgMAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI0CiAgICAvLyBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyNgogICAgLy8gZmVlPTAsCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjEtMjcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMAogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzItMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM0CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzgKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MC00MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MgogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ0LTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDUKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDcKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDQKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NC01MAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU0LTU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU2CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/challenge/smart_contracts/artifacts/asa_vault/client.py b/projects/challenge/smart_contracts/artifacts/asa_vault/client.py index 1f9af2b..b45eba3 100644 --- a/projects/challenge/smart_contracts/artifacts/asa_vault/client.py +++ b/projects/challenge/smart_contracts/artifacts/asa_vault/client.py @@ -51,7 +51,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjgKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzEKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMy0zNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNQogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM3LTQzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzgKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM5CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNy00MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NQogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIxLTI3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICBpbnQgMAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI0CiAgICAvLyBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyNgogICAgLy8gZmVlPTAsCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjEtMjcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMAogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzItMzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM0CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzgKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MC00MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MgogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ0LTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDUKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDcKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDQKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NC01MAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU0LTU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU2CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/challenge/smart_contracts/asa_vault/contract.py b/projects/challenge/smart_contracts/asa_vault/contract.py index 9ff62c4..dc5c18b 100644 --- a/projects/challenge/smart_contracts/asa_vault/contract.py +++ b/projects/challenge/smart_contracts/asa_vault/contract.py @@ -18,10 +18,17 @@ def authorize_creator(self) -> None: def opt_in_to_asset(self, mbr_pay: gtxn.PaymentTransaction) -> None: self.authorize_creator() assert not Global.current_application_address.is_opted_in(Asset(self.asset_id)) + itxn.AssetTransfer( + xfer_asset=self.asset_id, + asset_receiver=Global.current_application_address, + sender=Global.current_application_address, + asset_amount=0, + fee=0, + ).submit() assert mbr_pay.receiver == Global.current_application_address assert mbr_pay.amount == Global.min_balance + Global.asset_opt_in_min_balance - + @arc4.abimethod def deposit_asa(self, deposit_txn: gtxn.AssetTransferTransaction)-> None: self.authorize_creator() @@ -46,5 +53,4 @@ def withdraw_asa(self, asset: Asset) -> None: @arc4.abimethod(readonly=True) def get_asa_balance(self) -> UInt64: - return self.asa_balance - \ No newline at end of file + return self.asa_balance \ No newline at end of file