From 8d38a5b55d9862ddf74420320b22541ee0e162fa Mon Sep 17 00:00:00 2001 From: agus Date: Wed, 17 May 2023 12:46:04 -0300 Subject: [PATCH] add Unlimited weight to Xtokens --- precompiles/xtokens/Xtokens.sol | 18 ++++--- precompiles/xtokens/src/lib.rs | 48 ++++++++++++++++--- precompiles/xtokens/src/tests.rs | 47 ++++++++++++++++++ tests/contracts/compiled/XtokensInstance.json | 32 +++++++------ .../compiled/precompiles/xtokens/Xtokens.json | 20 ++++---- 5 files changed, 131 insertions(+), 34 deletions(-) diff --git a/precompiles/xtokens/Xtokens.sol b/precompiles/xtokens/Xtokens.sol index 96e4559dbb..50194e20cc 100644 --- a/precompiles/xtokens/Xtokens.sol +++ b/precompiles/xtokens/Xtokens.sol @@ -36,7 +36,8 @@ interface Xtokens { /// @param currencyAddress The ERC20 address of the currency we want to transfer /// @param amount The amount of tokens we want to transfer /// @param destination The Multilocation to which we want to send the tokens - /// @param destination The weight we want to buy in the destination chain + /// @param weight The weight we want to buy in the destination chain + /// (uint64::MAX means Unlimited weight) /// @custom:selector b9f813ff function transfer( address currencyAddress, @@ -51,7 +52,8 @@ interface Xtokens { /// @param currencyAddress The ERC20 address of the currency we want to transfer /// @param amount The amount of tokens we want to transfer /// @param destination The Multilocation to which we want to send the tokens - /// @param destination The weight we want to buy in the destination chain + /// @param weight The weight we want to buy in the destination chain + /// (uint64::MAX means Unlimited weight) /// @custom:selector 3e506ef0 function transferWithFee( address currencyAddress, @@ -68,7 +70,8 @@ interface Xtokens { /// Currently only Concrete Fungible assets /// @param amount The amount of tokens we want to transfer /// @param destination The Multilocation to which we want to send the tokens - /// @param destination The weight we want to buy in the destination chain + /// @param weight The weight we want to buy in the destination chain + /// (uint64::MAX means Unlimited weight) /// @custom:selector b4f76f96 function transferMultiasset( Multilocation memory asset, @@ -84,7 +87,8 @@ interface Xtokens { /// Currently only Concrete Fungible assets /// @param amount The amount of tokens we want to transfer /// @param destination The Multilocation to which we want to send the tokens - /// @param destination The weight we want to buy in the destination chain + /// @param weight The weight we want to buy in the destination chain + /// (uint64::MAX means Unlimited weight) /// @custom:selector 150c016a function transferMultiassetWithFee( Multilocation memory asset, @@ -100,7 +104,8 @@ interface Xtokens { /// @param currencies The currencies we want to transfer, defined by their address and amount. /// @param feeItem Which of the currencies to be used as fee /// @param destination The Multilocation to which we want to send the tokens - /// @param weight The weight we want to buy in the destination chain + /// @param weight The weight we want to buy in the destination chain + /// (uint64::MAX means Unlimited weight) /// @custom:selector ab946323 function transferMultiCurrencies( Currency[] memory currencies, @@ -115,7 +120,8 @@ interface Xtokens { /// @param assets The assets we want to transfer, defined by their location and amount. /// @param feeItem Which of the currencies to be used as fee /// @param destination The Multilocation to which we want to send the tokens - /// @param weight The weight we want to buy in the destination chain + /// @param weight The weight we want to buy in the destination chain + /// (uint64::MAX means Unlimited weight) /// @custom:selector 797b45fd function transferMultiAssets( MultiAsset[] memory assets, diff --git a/precompiles/xtokens/src/lib.rs b/precompiles/xtokens/src/lib.rs index 51c4d1a187..c4d3cdd4f4 100644 --- a/precompiles/xtokens/src/lib.rs +++ b/precompiles/xtokens/src/lib.rs @@ -94,11 +94,17 @@ where .try_into() .map_err(|_| RevertReason::value_is_too_large("balance type").in_field("amount"))?; + let dest_weight_limit = if weight == u64::MAX { + WeightLimit::Unlimited + } else { + WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)) + }; + let call = orml_xtokens::Call::::transfer { currency_id, amount, dest: Box::new(VersionedMultiLocation::V3(destination)), - dest_weight_limit: WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)), + dest_weight_limit, }; RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; @@ -137,12 +143,18 @@ where .try_into() .map_err(|_| RevertReason::value_is_too_large("balance type").in_field("fee"))?; + let dest_weight_limit = if weight == u64::MAX { + WeightLimit::Unlimited + } else { + WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)) + }; + let call = orml_xtokens::Call::::transfer_with_fee { currency_id, amount, fee, dest: Box::new(VersionedMultiLocation::V3(destination)), - dest_weight_limit: WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)), + dest_weight_limit, }; RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; @@ -164,13 +176,19 @@ where .try_into() .map_err(|_| RevertReason::value_is_too_large("balance type").in_field("amount"))?; + let dest_weight_limit = if weight == u64::MAX { + WeightLimit::Unlimited + } else { + WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)) + }; + let call = orml_xtokens::Call::::transfer_multiasset { asset: Box::new(VersionedMultiAsset::V3(MultiAsset { id: AssetId::Concrete(asset), fun: Fungibility::Fungible(to_balance), })), dest: Box::new(VersionedMultiLocation::V3(destination)), - dest_weight_limit: WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)), + dest_weight_limit, }; RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; @@ -200,6 +218,12 @@ where .try_into() .map_err(|_| RevertReason::value_is_too_large("balance type").in_field("fee"))?; + let dest_weight_limit = if weight == u64::MAX { + WeightLimit::Unlimited + } else { + WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)) + }; + let call = orml_xtokens::Call::::transfer_multiasset_with_fee { asset: Box::new(VersionedMultiAsset::V3(MultiAsset { id: AssetId::Concrete(asset.clone()), @@ -210,7 +234,7 @@ where fun: Fungibility::Fungible(fee), })), dest: Box::new(VersionedMultiLocation::V3(destination)), - dest_weight_limit: WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)), + dest_weight_limit, }; RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; @@ -260,11 +284,17 @@ where }) .collect::>()?; + let dest_weight_limit = if weight == u64::MAX { + WeightLimit::Unlimited + } else { + WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)) + }; + let call = orml_xtokens::Call::::transfer_multicurrencies { currencies, fee_item, dest: Box::new(VersionedMultiLocation::V3(destination)), - dest_weight_limit: WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)), + dest_weight_limit, }; RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; @@ -309,11 +339,17 @@ where .in_field("assets") })?; + let dest_weight_limit = if weight == u64::MAX { + WeightLimit::Unlimited + } else { + WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)) + }; + let call = orml_xtokens::Call::::transfer_multiassets { assets: Box::new(VersionedMultiAssets::V3(multiassets)), fee_item, dest: Box::new(VersionedMultiLocation::V3(destination)), - dest_weight_limit: WeightLimit::Limited(Weight::from_parts(weight, DEFAULT_PROOF_SIZE)), + dest_weight_limit, }; RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; diff --git a/precompiles/xtokens/src/tests.rs b/precompiles/xtokens/src/tests.rs index 7d6bf67c7f..29bffdef3c 100644 --- a/precompiles/xtokens/src/tests.rs +++ b/precompiles/xtokens/src/tests.rs @@ -165,6 +165,53 @@ fn transfer_to_reserve_works() { }); } +#[test] +fn transfer_to_reserve_with_unlimited_weight_works() { + ExtBuilder::default() + .with_balances(vec![(Alice.into(), 1000)]) + .build() + .execute_with(|| { + let destination = MultiLocation::new( + 1, + Junctions::X1(Junction::AccountId32 { + network: None, + id: [1u8; 32], + }), + ); + // We are transferring asset 0, which we have instructed to be the relay asset + precompiles() + .prepare_test( + Alice, + Precompile1, + PCall::transfer { + currency_address: Address(AssetAccount(0u128).into()), + amount: 500.into(), + destination: destination.clone(), + weight: u64::MAX, + }, + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(()); + + let expected_asset: MultiAsset = MultiAsset { + id: AssetId::Concrete( + CurrencyIdToMultiLocation::convert(CurrencyId::OtherReserve(0u128)).unwrap(), + ), + fun: Fungibility::Fungible(500), + }; + let expected: crate::mock::RuntimeEvent = XtokensEvent::TransferredMultiAssets { + sender: Alice.into(), + assets: vec![expected_asset.clone()].into(), + fee: expected_asset, + dest: destination, + } + .into(); + // Assert that the events vector contains the one expected + assert!(events().contains(&expected)); + }); +} + #[test] fn transfer_to_reserve_with_fee_works() { ExtBuilder::default() diff --git a/tests/contracts/compiled/XtokensInstance.json b/tests/contracts/compiled/XtokensInstance.json index 5f2ae81de0..5cb6f005de 100644 --- a/tests/contracts/compiled/XtokensInstance.json +++ b/tests/contracts/compiled/XtokensInstance.json @@ -1,5 +1,5 @@ { - "byteCode": "0x608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50610f1f8061006d6000396000f3fe608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50600436106100af5760003560e01c8063150c016a146101145780633e506ef014610129578063797b45fd1461013c578063ab9463231461014f578063b4f76f9614610162578063b9f813ff14610175575b60405162461bcd60e51b815260206004820152603560248201527f436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b2060448201908152746e6f7220726563656976652066756e6374696f6e7360581b6064830152608482fd5b6101276101223660046107cd565b610188565b005b610127610137366004610874565b61023e565b61012761014a3660046108e4565b61026b565b61012761015d366004610a32565b61031e565b610127610170366004610b40565b610349565b610127610183366004610b9f565b610374565b604051630a8600b560e11b81526108049063150c016a906101b59088908890889088908890600401610c95565b600060405180830381600087803b15801561021f5760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610233573d6000803e3d6000fd5b505050505050505050565b6040516303e506ef60e41b815261080490633e506ef0906101b59088908890889088908890600401610ce2565b60405163797b45fd60e01b81526108049063797b45fd90610296908790879087908790600401610d2a565b600060405180830381600087803b1580156103005760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610314573d6000803e3d6000fd5b5050505050505050565b60405163ab94632360e01b81526108049063ab94632390610296908790879087908790600401610dd9565b604051635a7bb7cb60e11b81526108049063b4f76f9690610296908790879087908790600401610e62565b60405163b9f813ff60e01b81526108049063b9f813ff90610296908790879087908790600401610ea8565b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a207475706c65206461746120746f6f2073686f6044820152611c9d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a20696e76616c6964207475706c65206f666673604482015261195d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20737472756374206461746120746f6f2073686044820152621bdc9d60ea1b6064820152608481fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104c8576104c8610490565b60405290565b604051601f8201601f191681016001600160401b03811182821017156104f6576104f6610490565b604052919050565b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20696e76616c696420737472756374206f66666044820152621cd95d60ea1b6064820152608481fd5b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a1c9c985e481bd9999cd95d60aa1b6064820152608481fd5b60006001600160401b038211156105c1576105c1610490565b5060051b60200190565b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a727261792073747269646560a81b6064820152608481fd5b6000604080838503121561063a5761063a61043f565b6106426104a6565b9150823560ff8116811461065557600080fd5b82526020838101356001600160401b0380821115610675576106756104fe565b8186019150601f878184011261068d5761068d61054f565b82356106a061069b826105a8565b6104ce565b81815260059190911b8401850190858101908a8311156106c2576106c26105cb565b8686015b8381101561079d578035868111156106e0576106e061054f565b8701603f81018d136106f4576106f461054f565b888101358781111561070857610708610490565b610719818801601f19168b016104ce565b8181528e8c83850101111561077c578b5162461bcd60e51b8152600481018c9052602760248201527f414249206465636f64696e673a20696e76616c69642062797465206172726179604482015266040d8cadccee8d60cb1b6064820152608481fd5b818c84018c83013760009181018b01919091528452509187019187016106c6565b5080878a0152505050505050505092915050565b80356001600160401b03811681146107c857600080fd5b919050565b600080600080600060a086880312156107e8576107e861039f565b85356001600160401b0380821115610802576108026103ef565b61080e89838a01610624565b965060208801359550604088013594506060880135915080821115610835576108356103ef565b5061084288828901610624565b925050610851608087016107b1565b90509295509295909350565b80356001600160a01b03811681146107c857600080fd5b600080600080600060a0868803121561088f5761088f61039f565b6108988661085d565b9450602086013593506040860135925060608601356001600160401b038111156108c4576108c46103ef565b61084288828901610624565b803563ffffffff811681146107c857600080fd5b600080600080608085870312156108fd576108fd61039f565b6001600160401b038086351115610916576109166103ef565b8535860187601f82011261092c5761092c61054f565b61093961069b82356105a8565b81358082526020808301929160051b8401018a81111561095b5761095b6105cb565b602084015b818110156109e05785813511156109795761097961054f565b803585016040818e03601f190112156109945761099461043f565b61099c6104a6565b6020820135888111156109b1576109b16104fe565b6109c08f602083860101610624565b825250604091909101356020808301919091529085529384019301610960565b50508097505050506109f4602087016108d0565b9350604086013581811115610a0b57610a0b6103ef565b610a1788828901610624565b93505050610a27606086016107b1565b905092959194509250565b60008060008060808587031215610a4b57610a4b61039f565b84356001600160401b0380821115610a6557610a656103ef565b818701915087601f830112610a7c57610a7c61054f565b81356020610a8c61069b836105a8565b82815260069290921b8401810191818101908b841115610aae57610aae6105cb565b948201945b83861015610afa576040868d031215610ace57610ace61043f565b610ad66104a6565b610adf8761085d565b81528684013584820152825260409095019490820190610ab3565b9850610b0990508982016108d0565b965050506040870135915080821115610b2457610b246103ef565b50610b3187828801610624565b925050610a27606086016107b1565b60008060008060808587031215610b5957610b5961039f565b84356001600160401b0380821115610b7357610b736103ef565b610b7f88838901610624565b9550602087013594506040870135915080821115610b2457610b246103ef565b60008060008060808587031215610bb857610bb861039f565b610bc18561085d565b93506020850135925060408501356001600160401b03811115610be657610be66103ef565b610b3187828801610624565b60006040830160ff835116845260208084015160408287015282815180855260608801915060608160051b890101945083830192506000805b82811015610c8757898703605f1901845284518051808952835b81811015610c60578281018901518a82018a01528801610c45565b508881018801849052601f01601f1916909701860196509385019392850192600101610c2b565b509498975050505050505050565b60a081526000610ca860a0830188610bf2565b8660208401528560408401528281036060840152610cc68186610bf2565b9150506001600160401b03831660808301529695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000610d0f60a0830185610bf2565b90506001600160401b03831660808301529695505050505050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b83811015610d9757609f19888703018552815160408151818952610d79828a0182610bf2565b92860151988601989098525095509382019390820190600101610d53565b505063ffffffff89169086015250508281036040840152610db88186610bf2565b915050610dd060608301846001600160401b03169052565b95945050505050565b6080808252855190820181905260009060209060a0840190828901845b82811015610e2657815180516001600160a01b031685528501518585015260409093019290840190600101610df6565b50505063ffffffff8716828501528381036040850152610e468187610bf2565b925050506001600160401b038316606083015295945050505050565b608081526000610e756080830187610bf2565b8560208401528281036040840152610e8d8186610bf2565b9150506001600160401b038316606083015295945050505050565b60018060a01b0385168152836020820152608060408201526000610ecf6080830185610bf2565b90506001600160401b03831660608301529594505050505056fea26469706673582212202085c2310b813aa1a9795bbb224210110ff7fcebe903592aa6e53d5dd059fe5964736f6c63430008130033", + "byteCode": "0x608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50610f1f8061006d6000396000f3fe608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50600436106100af5760003560e01c8063150c016a146101145780633e506ef014610129578063797b45fd1461013c578063ab9463231461014f578063b4f76f9614610162578063b9f813ff14610175575b60405162461bcd60e51b815260206004820152603560248201527f436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b2060448201908152746e6f7220726563656976652066756e6374696f6e7360581b6064830152608482fd5b6101276101223660046107cd565b610188565b005b610127610137366004610874565b61023e565b61012761014a3660046108e4565b61026b565b61012761015d366004610a32565b61031e565b610127610170366004610b40565b610349565b610127610183366004610b9f565b610374565b604051630a8600b560e11b81526108049063150c016a906101b59088908890889088908890600401610c95565b600060405180830381600087803b15801561021f5760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610233573d6000803e3d6000fd5b505050505050505050565b6040516303e506ef60e41b815261080490633e506ef0906101b59088908890889088908890600401610ce2565b60405163797b45fd60e01b81526108049063797b45fd90610296908790879087908790600401610d2a565b600060405180830381600087803b1580156103005760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610314573d6000803e3d6000fd5b5050505050505050565b60405163ab94632360e01b81526108049063ab94632390610296908790879087908790600401610dd9565b604051635a7bb7cb60e11b81526108049063b4f76f9690610296908790879087908790600401610e62565b60405163b9f813ff60e01b81526108049063b9f813ff90610296908790879087908790600401610ea8565b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a207475706c65206461746120746f6f2073686f6044820152611c9d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a20696e76616c6964207475706c65206f666673604482015261195d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20737472756374206461746120746f6f2073686044820152621bdc9d60ea1b6064820152608481fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104c8576104c8610490565b60405290565b604051601f8201601f191681016001600160401b03811182821017156104f6576104f6610490565b604052919050565b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20696e76616c696420737472756374206f66666044820152621cd95d60ea1b6064820152608481fd5b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a1c9c985e481bd9999cd95d60aa1b6064820152608481fd5b60006001600160401b038211156105c1576105c1610490565b5060051b60200190565b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a727261792073747269646560a81b6064820152608481fd5b6000604080838503121561063a5761063a61043f565b6106426104a6565b9150823560ff8116811461065557600080fd5b82526020838101356001600160401b0380821115610675576106756104fe565b8186019150601f878184011261068d5761068d61054f565b82356106a061069b826105a8565b6104ce565b81815260059190911b8401850190858101908a8311156106c2576106c26105cb565b8686015b8381101561079d578035868111156106e0576106e061054f565b8701603f81018d136106f4576106f461054f565b888101358781111561070857610708610490565b610719818801601f19168b016104ce565b8181528e8c83850101111561077c578b5162461bcd60e51b8152600481018c9052602760248201527f414249206465636f64696e673a20696e76616c69642062797465206172726179604482015266040d8cadccee8d60cb1b6064820152608481fd5b818c84018c83013760009181018b01919091528452509187019187016106c6565b5080878a0152505050505050505092915050565b80356001600160401b03811681146107c857600080fd5b919050565b600080600080600060a086880312156107e8576107e861039f565b85356001600160401b0380821115610802576108026103ef565b61080e89838a01610624565b965060208801359550604088013594506060880135915080821115610835576108356103ef565b5061084288828901610624565b925050610851608087016107b1565b90509295509295909350565b80356001600160a01b03811681146107c857600080fd5b600080600080600060a0868803121561088f5761088f61039f565b6108988661085d565b9450602086013593506040860135925060608601356001600160401b038111156108c4576108c46103ef565b61084288828901610624565b803563ffffffff811681146107c857600080fd5b600080600080608085870312156108fd576108fd61039f565b6001600160401b038086351115610916576109166103ef565b8535860187601f82011261092c5761092c61054f565b61093961069b82356105a8565b81358082526020808301929160051b8401018a81111561095b5761095b6105cb565b602084015b818110156109e05785813511156109795761097961054f565b803585016040818e03601f190112156109945761099461043f565b61099c6104a6565b6020820135888111156109b1576109b16104fe565b6109c08f602083860101610624565b825250604091909101356020808301919091529085529384019301610960565b50508097505050506109f4602087016108d0565b9350604086013581811115610a0b57610a0b6103ef565b610a1788828901610624565b93505050610a27606086016107b1565b905092959194509250565b60008060008060808587031215610a4b57610a4b61039f565b84356001600160401b0380821115610a6557610a656103ef565b818701915087601f830112610a7c57610a7c61054f565b81356020610a8c61069b836105a8565b82815260069290921b8401810191818101908b841115610aae57610aae6105cb565b948201945b83861015610afa576040868d031215610ace57610ace61043f565b610ad66104a6565b610adf8761085d565b81528684013584820152825260409095019490820190610ab3565b9850610b0990508982016108d0565b965050506040870135915080821115610b2457610b246103ef565b50610b3187828801610624565b925050610a27606086016107b1565b60008060008060808587031215610b5957610b5961039f565b84356001600160401b0380821115610b7357610b736103ef565b610b7f88838901610624565b9550602087013594506040870135915080821115610b2457610b246103ef565b60008060008060808587031215610bb857610bb861039f565b610bc18561085d565b93506020850135925060408501356001600160401b03811115610be657610be66103ef565b610b3187828801610624565b60006040830160ff835116845260208084015160408287015282815180855260608801915060608160051b890101945083830192506000805b82811015610c8757898703605f1901845284518051808952835b81811015610c60578281018901518a82018a01528801610c45565b508881018801849052601f01601f1916909701860196509385019392850192600101610c2b565b509498975050505050505050565b60a081526000610ca860a0830188610bf2565b8660208401528560408401528281036060840152610cc68186610bf2565b9150506001600160401b03831660808301529695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000610d0f60a0830185610bf2565b90506001600160401b03831660808301529695505050505050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b83811015610d9757609f19888703018552815160408151818952610d79828a0182610bf2565b92860151988601989098525095509382019390820190600101610d53565b505063ffffffff89169086015250508281036040840152610db88186610bf2565b915050610dd060608301846001600160401b03169052565b95945050505050565b6080808252855190820181905260009060209060a0840190828901845b82811015610e2657815180516001600160a01b031685528501518585015260409093019290840190600101610df6565b50505063ffffffff8716828501528381036040850152610e468187610bf2565b925050506001600160401b038316606083015295945050505050565b608081526000610e756080830187610bf2565b8560208401528281036040840152610e8d8186610bf2565b9150506001600160401b038316606083015295945050505050565b60018060a01b0385168152836020820152608060408201526000610ecf6080830185610bf2565b90506001600160401b03831660608301529594505050505056fea264697066735822122075f5e5c3b6cc37a9c35ed64b92d75971c7fccfd27ecc159ed21810a49ab50c0864736f6c63430008130033", "contract": { "abi": [ { @@ -225,7 +225,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "currencyAddress": "The ERC20 address of the currency we want to transfer", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)": { @@ -234,7 +235,7 @@ "assets": "The assets we want to transfer, defined by their location and amount.", "destination": "The Multilocation to which we want to send the tokens", "feeItem": "Which of the currencies to be used as fee", - "weight": "The weight we want to buy in the destination chain" + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)": { @@ -243,7 +244,7 @@ "currencies": "The currencies we want to transfer, defined by their address and amount.", "destination": "The Multilocation to which we want to send the tokens", "feeItem": "Which of the currencies to be used as fee", - "weight": "The weight we want to buy in the destination chain" + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)": { @@ -251,7 +252,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)": { @@ -259,7 +261,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)": { @@ -267,20 +270,21 @@ "params": { "amount": "The amount of tokens we want to transfer", "currencyAddress": "The ERC20 address of the currency we want to transfer", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } } }, "version": 1 }, "evm": { - "assembly": " /* \"XTokensInstance.sol\":119:2115 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x22\n 0x24\n dup3\n add\n mstore\n 0x45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xf1, 0x37b7)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"XTokensInstance.sol\":119:2115 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x22\n 0x24\n dup3\n add\n mstore\n 0x45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xf1, 0x37b7)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x150c016a\n eq\n tag_3\n jumpi\n dup1\n 0x3e506ef0\n eq\n tag_4\n jumpi\n dup1\n 0x797b45fd\n eq\n tag_5\n jumpi\n dup1\n 0xab946323\n eq\n tag_6\n jumpi\n dup1\n 0xb4f76f96\n eq\n tag_7\n jumpi\n dup1\n 0xb9f813ff\n eq\n tag_8\n jumpi\n tag_2:\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x35\n 0x24\n dup3\n add\n mstore\n 0x436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b20\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0x58, 0x6e6f7220726563656976652066756e6374696f6e73)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n /* \"XTokensInstance.sol\":1058:1433 function transferMultiassetWithFee(... */\n tag_3:\n tag_9\n tag_10\n calldatasize\n 0x04\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"XTokensInstance.sol\":419:781 function transferWithFee(... */\n tag_4:\n tag_9\n tag_14\n calldatasize\n 0x04\n tag_15\n jump\t// in\n tag_14:\n tag_16\n jump\t// in\n /* \"XTokensInstance.sol\":1786:2113 function transferMultiAssets(... */\n tag_5:\n tag_9\n tag_18\n calldatasize\n 0x04\n tag_19\n jump\t// in\n tag_18:\n tag_20\n jump\t// in\n /* \"XTokensInstance.sol\":1439:1780 function transferMultiCurrencies(... */\n tag_6:\n tag_9\n tag_22\n calldatasize\n 0x04\n tag_23\n jump\t// in\n tag_22:\n tag_24\n jump\t// in\n /* \"XTokensInstance.sol\":787:1052 function transferMultiasset(... */\n tag_7:\n tag_9\n tag_26\n calldatasize\n 0x04\n tag_27\n jump\t// in\n tag_26:\n tag_28\n jump\t// in\n /* \"XTokensInstance.sol\":161:413 function transfer(... */\n tag_8:\n tag_9\n tag_30\n calldatasize\n 0x04\n tag_31\n jump\t// in\n tag_30:\n tag_32\n jump\t// in\n /* \"XTokensInstance.sol\":1058:1433 function transferMultiassetWithFee(... */\n tag_12:\n /* \"XTokensInstance.sol\":1273:1426 XTOKENS_CONTRACT.transferMultiassetWithFee(... */\n mload(0x40)\n shl(0xe1, 0x0a8600b5)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":1273:1315 XTOKENS_CONTRACT.transferMultiassetWithFee */\n 0x150c016a\n swap1\n /* \"XTokensInstance.sol\":1273:1426 XTOKENS_CONTRACT.transferMultiassetWithFee(... */\n tag_34\n swap1\n /* \"XTokensInstance.sol\":1329:1334 asset */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1348:1354 amount */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1368:1371 fee */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1385:1396 destination */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1410:1416 weight */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1273:1426 XTOKENS_CONTRACT.transferMultiassetWithFee(... */\n 0x04\n add\n tag_35\n jump\t// in\n tag_34:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_36\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x25\n 0x24\n dup3\n add\n mstore\n 0x54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xd8, 0x20636f6465)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n tag_36:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_38\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_38:\n pop\n pop\n pop\n pop\n /* \"XTokensInstance.sol\":1058:1433 function transferMultiassetWithFee(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"XTokensInstance.sol\":419:781 function transferWithFee(... */\n tag_16:\n /* \"XTokensInstance.sol\":621:774 XTOKENS_CONTRACT.transferWithFee(... */\n mload(0x40)\n shl(0xe4, 0x03e506ef)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":621:653 XTOKENS_CONTRACT.transferWithFee */\n 0x3e506ef0\n swap1\n /* \"XTokensInstance.sol\":621:774 XTOKENS_CONTRACT.transferWithFee(... */\n tag_34\n swap1\n /* \"XTokensInstance.sol\":667:682 currencyAddress */\n dup9\n swap1\n /* \"XTokensInstance.sol\":696:702 amount */\n dup9\n swap1\n /* \"XTokensInstance.sol\":716:719 fee */\n dup9\n swap1\n /* \"XTokensInstance.sol\":733:744 destination */\n dup9\n swap1\n /* \"XTokensInstance.sol\":758:764 weight */\n dup9\n swap1\n /* \"XTokensInstance.sol\":621:774 XTOKENS_CONTRACT.transferWithFee(... */\n 0x04\n add\n tag_41\n jump\t// in\n /* \"XTokensInstance.sol\":1786:2113 function transferMultiAssets(... */\n tag_20:\n /* \"XTokensInstance.sol\":1974:2106 XTOKENS_CONTRACT.transferMultiAssets(... */\n mload(0x40)\n shl(0xe0, 0x797b45fd)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":1974:2010 XTOKENS_CONTRACT.transferMultiAssets */\n 0x797b45fd\n swap1\n /* \"XTokensInstance.sol\":1974:2106 XTOKENS_CONTRACT.transferMultiAssets(... */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":2024:2030 assets */\n dup8\n swap1\n /* \"XTokensInstance.sol\":2044:2051 feeItem */\n dup8\n swap1\n /* \"XTokensInstance.sol\":2065:2076 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":2090:2096 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1974:2106 XTOKENS_CONTRACT.transferMultiAssets(... */\n 0x04\n add\n tag_47\n jump\t// in\n tag_46:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_48\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x25\n 0x24\n dup3\n add\n mstore\n 0x54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xd8, 0x20636f6465)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n tag_48:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_50\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_50:\n pop\n pop\n pop\n pop\n /* \"XTokensInstance.sol\":1786:2113 function transferMultiAssets(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"XTokensInstance.sol\":1439:1780 function transferMultiCurrencies(... */\n tag_24:\n /* \"XTokensInstance.sol\":1633:1773 XTOKENS_CONTRACT.transferMultiCurrencies(... */\n mload(0x40)\n shl(0xe0, 0xab946323)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":1633:1673 XTOKENS_CONTRACT.transferMultiCurrencies */\n 0xab946323\n swap1\n /* \"XTokensInstance.sol\":1633:1773 XTOKENS_CONTRACT.transferMultiCurrencies(... */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":1687:1697 currencies */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1711:1718 feeItem */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1732:1743 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1757:1763 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1633:1773 XTOKENS_CONTRACT.transferMultiCurrencies(... */\n 0x04\n add\n tag_53\n jump\t// in\n /* \"XTokensInstance.sol\":787:1052 function transferMultiasset(... */\n tag_28:\n /* \"XTokensInstance.sol\":974:1045 XTOKENS_CONTRACT.transferMultiasset(asset, amount, destination, weight) */\n mload(0x40)\n shl(0xe1, 0x5a7bb7cb)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":974:1009 XTOKENS_CONTRACT.transferMultiasset */\n 0xb4f76f96\n swap1\n /* \"XTokensInstance.sol\":974:1045 XTOKENS_CONTRACT.transferMultiasset(asset, amount, destination, weight) */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":1010:1015 asset */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1017:1023 amount */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1025:1036 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1038:1044 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":974:1045 XTOKENS_CONTRACT.transferMultiasset(asset, amount, destination, weight) */\n 0x04\n add\n tag_59\n jump\t// in\n /* \"XTokensInstance.sol\":161:413 function transfer(... */\n tag_32:\n /* \"XTokensInstance.sol\":335:406 XTOKENS_CONTRACT.transfer(currencyAddress, amount, destination, weight) */\n mload(0x40)\n shl(0xe0, 0xb9f813ff)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":335:360 XTOKENS_CONTRACT.transfer */\n 0xb9f813ff\n swap1\n /* \"XTokensInstance.sol\":335:406 XTOKENS_CONTRACT.transfer(currencyAddress, amount, destination, weight) */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":361:376 currencyAddress */\n dup8\n swap1\n /* \"XTokensInstance.sol\":378:384 amount */\n dup8\n swap1\n /* \"XTokensInstance.sol\":386:397 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":399:405 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":335:406 XTOKENS_CONTRACT.transfer(currencyAddress, amount, destination, weight) */\n 0x04\n add\n tag_65\n jump\t// in\n /* \"#utility.yul\":14:389 */\n tag_69:\n /* \"#utility.yul\":136:138 */\n 0x40\n /* \"#utility.yul\":130:139 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":148:180 */\n dup2\n mstore\n /* \"#utility.yul\":211:215 */\n 0x20\n /* \"#utility.yul\":207:208 */\n 0x04\n /* \"#utility.yul\":196:209 */\n dup3\n add\n /* \"#utility.yul\":189:216 */\n mstore\n /* \"#utility.yul\":248:250 */\n 0x22\n /* \"#utility.yul\":243:245 */\n 0x24\n /* \"#utility.yul\":232:246 */\n dup3\n add\n /* \"#utility.yul\":225:251 */\n mstore\n /* \"#utility.yul\":283:317 */\n 0x414249206465636f64696e673a207475706c65206461746120746f6f2073686f\n /* \"#utility.yul\":278:280 */\n 0x44\n /* \"#utility.yul\":267:281 */\n dup3\n add\n /* \"#utility.yul\":260:318 */\n mstore\n shl(0xf2, 0x1c9d)\n /* \"#utility.yul\":345:348 */\n 0x64\n /* \"#utility.yul\":334:349 */\n dup3\n add\n /* \"#utility.yul\":327:356 */\n mstore\n /* \"#utility.yul\":379:382 */\n 0x84\n /* \"#utility.yul\":130:139 */\n dup2\n /* \"#utility.yul\":365:383 */\n revert\n /* \"#utility.yul\":394:769 */\n tag_70:\n /* \"#utility.yul\":516:518 */\n 0x40\n /* \"#utility.yul\":510:519 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":528:560 */\n dup2\n mstore\n /* \"#utility.yul\":591:595 */\n 0x20\n /* \"#utility.yul\":587:588 */\n 0x04\n /* \"#utility.yul\":576:589 */\n dup3\n add\n /* \"#utility.yul\":569:596 */\n mstore\n /* \"#utility.yul\":628:630 */\n 0x22\n /* \"#utility.yul\":623:625 */\n 0x24\n /* \"#utility.yul\":612:626 */\n dup3\n add\n /* \"#utility.yul\":605:631 */\n mstore\n /* \"#utility.yul\":663:697 */\n 0x414249206465636f64696e673a20696e76616c6964207475706c65206f666673\n /* \"#utility.yul\":658:660 */\n 0x44\n /* \"#utility.yul\":647:661 */\n dup3\n add\n /* \"#utility.yul\":640:698 */\n mstore\n shl(0xf2, 0x195d)\n /* \"#utility.yul\":725:728 */\n 0x64\n /* \"#utility.yul\":714:729 */\n dup3\n add\n /* \"#utility.yul\":707:736 */\n mstore\n /* \"#utility.yul\":759:762 */\n 0x84\n /* \"#utility.yul\":510:519 */\n dup2\n /* \"#utility.yul\":745:763 */\n revert\n /* \"#utility.yul\":774:1150 */\n tag_71:\n /* \"#utility.yul\":896:898 */\n 0x40\n /* \"#utility.yul\":890:899 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":908:940 */\n dup2\n mstore\n /* \"#utility.yul\":971:975 */\n 0x20\n /* \"#utility.yul\":967:968 */\n 0x04\n /* \"#utility.yul\":956:969 */\n dup3\n add\n /* \"#utility.yul\":949:976 */\n mstore\n /* \"#utility.yul\":1008:1010 */\n 0x23\n /* \"#utility.yul\":1003:1005 */\n 0x24\n /* \"#utility.yul\":992:1006 */\n dup3\n add\n /* \"#utility.yul\":985:1011 */\n mstore\n /* \"#utility.yul\":1043:1077 */\n 0x414249206465636f64696e673a20737472756374206461746120746f6f207368\n /* \"#utility.yul\":1038:1040 */\n 0x44\n /* \"#utility.yul\":1027:1041 */\n dup3\n add\n /* \"#utility.yul\":1020:1078 */\n mstore\n shl(0xea, 0x1bdc9d)\n /* \"#utility.yul\":1105:1108 */\n 0x64\n /* \"#utility.yul\":1094:1109 */\n dup3\n add\n /* \"#utility.yul\":1087:1117 */\n mstore\n /* \"#utility.yul\":1140:1143 */\n 0x84\n /* \"#utility.yul\":890:899 */\n dup2\n /* \"#utility.yul\":1126:1144 */\n revert\n /* \"#utility.yul\":1155:1282 */\n tag_72:\n /* \"#utility.yul\":1216:1226 */\n 0x4e487b71\n /* \"#utility.yul\":1211:1214 */\n 0xe0\n /* \"#utility.yul\":1207:1227 */\n shl\n /* \"#utility.yul\":1204:1205 */\n 0x00\n /* \"#utility.yul\":1197:1228 */\n mstore\n /* \"#utility.yul\":1247:1251 */\n 0x41\n /* \"#utility.yul\":1244:1245 */\n 0x04\n /* \"#utility.yul\":1237:1252 */\n mstore\n /* \"#utility.yul\":1271:1275 */\n 0x24\n /* \"#utility.yul\":1268:1269 */\n 0x00\n /* \"#utility.yul\":1261:1276 */\n revert\n /* \"#utility.yul\":1287:1544 */\n tag_73:\n /* \"#utility.yul\":1359:1363 */\n 0x40\n /* \"#utility.yul\":1353:1364 */\n dup1\n mload\n swap1\n /* \"#utility.yul\":1391:1408 */\n dup2\n add\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":1423:1457 */\n dup2\n gt\n /* \"#utility.yul\":1459:1481 */\n dup3\n dup3\n lt\n /* \"#utility.yul\":1420:1482 */\n or\n /* \"#utility.yul\":1417:1505 */\n iszero\n tag_93\n jumpi\n /* \"#utility.yul\":1485:1503 */\n tag_93\n tag_72\n jump\t// in\n tag_93:\n /* \"#utility.yul\":1521:1525 */\n 0x40\n /* \"#utility.yul\":1514:1538 */\n mstore\n /* \"#utility.yul\":1287:1544 */\n swap1\n jump\t// out\n /* \"#utility.yul\":1549:1824 */\n tag_74:\n /* \"#utility.yul\":1620:1622 */\n 0x40\n /* \"#utility.yul\":1614:1623 */\n mload\n /* \"#utility.yul\":1685:1687 */\n 0x1f\n /* \"#utility.yul\":1666:1679 */\n dup3\n add\n not(0x1f)\n /* \"#utility.yul\":1662:1689 */\n and\n /* \"#utility.yul\":1650:1690 */\n dup2\n add\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":1705:1739 */\n dup2\n gt\n /* \"#utility.yul\":1741:1763 */\n dup3\n dup3\n lt\n /* \"#utility.yul\":1702:1764 */\n or\n /* \"#utility.yul\":1699:1787 */\n iszero\n tag_96\n jumpi\n /* \"#utility.yul\":1767:1785 */\n tag_96\n tag_72\n jump\t// in\n tag_96:\n /* \"#utility.yul\":1803:1805 */\n 0x40\n /* \"#utility.yul\":1796:1818 */\n mstore\n /* \"#utility.yul\":1549:1824 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1829:2205 */\n tag_75:\n /* \"#utility.yul\":1951:1953 */\n 0x40\n /* \"#utility.yul\":1945:1954 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":1963:1995 */\n dup2\n mstore\n /* \"#utility.yul\":2026:2030 */\n 0x20\n /* \"#utility.yul\":2022:2023 */\n 0x04\n /* \"#utility.yul\":2011:2024 */\n dup3\n add\n /* \"#utility.yul\":2004:2031 */\n mstore\n /* \"#utility.yul\":2063:2065 */\n 0x23\n /* \"#utility.yul\":2058:2060 */\n 0x24\n /* \"#utility.yul\":2047:2061 */\n dup3\n add\n /* \"#utility.yul\":2040:2066 */\n mstore\n /* \"#utility.yul\":2098:2132 */\n 0x414249206465636f64696e673a20696e76616c696420737472756374206f6666\n /* \"#utility.yul\":2093:2095 */\n 0x44\n /* \"#utility.yul\":2082:2096 */\n dup3\n add\n /* \"#utility.yul\":2075:2133 */\n mstore\n shl(0xea, 0x1cd95d)\n /* \"#utility.yul\":2160:2163 */\n 0x64\n /* \"#utility.yul\":2149:2164 */\n dup3\n add\n /* \"#utility.yul\":2142:2172 */\n mstore\n /* \"#utility.yul\":2195:2198 */\n 0x84\n /* \"#utility.yul\":1945:1954 */\n dup2\n /* \"#utility.yul\":2181:2199 */\n revert\n /* \"#utility.yul\":2210:2594 */\n tag_76:\n /* \"#utility.yul\":2332:2334 */\n 0x40\n /* \"#utility.yul\":2326:2335 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":2344:2376 */\n dup2\n mstore\n /* \"#utility.yul\":2407:2411 */\n 0x20\n /* \"#utility.yul\":2403:2404 */\n 0x04\n /* \"#utility.yul\":2392:2405 */\n dup3\n add\n /* \"#utility.yul\":2385:2412 */\n mstore\n /* \"#utility.yul\":2444:2446 */\n 0x2b\n /* \"#utility.yul\":2439:2441 */\n 0x24\n /* \"#utility.yul\":2428:2442 */\n dup3\n add\n /* \"#utility.yul\":2421:2447 */\n mstore\n /* \"#utility.yul\":2479:2513 */\n 0x414249206465636f64696e673a20696e76616c69642063616c6c646174612061\n /* \"#utility.yul\":2474:2476 */\n 0x44\n /* \"#utility.yul\":2463:2477 */\n dup3\n add\n /* \"#utility.yul\":2456:2514 */\n mstore\n shl(0xaa, 0x1c9c985e481bd9999cd95d)\n /* \"#utility.yul\":2541:2544 */\n 0x64\n /* \"#utility.yul\":2530:2545 */\n dup3\n add\n /* \"#utility.yul\":2523:2561 */\n mstore\n /* \"#utility.yul\":2584:2587 */\n 0x84\n /* \"#utility.yul\":2326:2335 */\n dup2\n /* \"#utility.yul\":2570:2588 */\n revert\n /* \"#utility.yul\":2599:2780 */\n tag_77:\n /* \"#utility.yul\":2657:2661 */\n 0x00\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":2682:2688 */\n dup3\n /* \"#utility.yul\":2679:2709 */\n gt\n /* \"#utility.yul\":2676:2732 */\n iszero\n tag_101\n jumpi\n /* \"#utility.yul\":2712:2730 */\n tag_101\n tag_72\n jump\t// in\n tag_101:\n pop\n /* \"#utility.yul\":2757:2758 */\n 0x05\n /* \"#utility.yul\":2753:2767 */\n shl\n /* \"#utility.yul\":2769:2773 */\n 0x20\n /* \"#utility.yul\":2749:2774 */\n add\n swap1\n /* \"#utility.yul\":2599:2780 */\n jump\t// out\n /* \"#utility.yul\":2785:3169 */\n tag_78:\n /* \"#utility.yul\":2907:2909 */\n 0x40\n /* \"#utility.yul\":2901:2910 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":2919:2951 */\n dup2\n mstore\n /* \"#utility.yul\":2982:2986 */\n 0x20\n /* \"#utility.yul\":2978:2979 */\n 0x04\n /* \"#utility.yul\":2967:2980 */\n dup3\n add\n /* \"#utility.yul\":2960:2987 */\n mstore\n /* \"#utility.yul\":3019:3021 */\n 0x2b\n /* \"#utility.yul\":3014:3016 */\n 0x24\n /* \"#utility.yul\":3003:3017 */\n dup3\n add\n /* \"#utility.yul\":2996:3022 */\n mstore\n /* \"#utility.yul\":3054:3088 */\n 0x414249206465636f64696e673a20696e76616c69642063616c6c646174612061\n /* \"#utility.yul\":3049:3051 */\n 0x44\n /* \"#utility.yul\":3038:3052 */\n dup3\n add\n /* \"#utility.yul\":3031:3089 */\n mstore\n shl(0xa8, 0x7272617920737472696465)\n /* \"#utility.yul\":3116:3119 */\n 0x64\n /* \"#utility.yul\":3105:3120 */\n dup3\n add\n /* \"#utility.yul\":3098:3136 */\n mstore\n /* \"#utility.yul\":3159:3162 */\n 0x84\n /* \"#utility.yul\":2901:2910 */\n dup2\n /* \"#utility.yul\":3145:3163 */\n revert\n /* \"#utility.yul\":3174:5804 */\n tag_79:\n /* \"#utility.yul\":3234:3239 */\n 0x00\n /* \"#utility.yul\":3264:3268 */\n 0x40\n /* \"#utility.yul\":3305:3307 */\n dup1\n /* \"#utility.yul\":3293:3302 */\n dup4\n /* \"#utility.yul\":3288:3291 */\n dup6\n /* \"#utility.yul\":3284:3303 */\n sub\n /* \"#utility.yul\":3280:3308 */\n slt\n /* \"#utility.yul\":3277:3420 */\n iszero\n tag_105\n jumpi\n /* \"#utility.yul\":3331:3410 */\n tag_105\n tag_71\n jump\t// in\n tag_105:\n /* \"#utility.yul\":3438:3460 */\n tag_106\n tag_73\n jump\t// in\n tag_106:\n /* \"#utility.yul\":3429:3460 */\n swap2\n pop\n /* \"#utility.yul\":3497:3506 */\n dup3\n /* \"#utility.yul\":3484:3507 */\n calldataload\n /* \"#utility.yul\":3551:3555 */\n 0xff\n /* \"#utility.yul\":3542:3549 */\n dup2\n /* \"#utility.yul\":3538:3556 */\n and\n /* \"#utility.yul\":3529:3536 */\n dup2\n /* \"#utility.yul\":3526:3557 */\n eq\n /* \"#utility.yul\":3516:3575 */\n tag_107\n jumpi\n /* \"#utility.yul\":3571:3572 */\n 0x00\n /* \"#utility.yul\":3568:3569 */\n dup1\n /* \"#utility.yul\":3561:3573 */\n revert\n /* \"#utility.yul\":3516:3575 */\n tag_107:\n /* \"#utility.yul\":3584:3606 */\n dup3\n mstore\n /* \"#utility.yul\":3625:3627 */\n 0x20\n /* \"#utility.yul\":3663:3681 */\n dup4\n dup2\n add\n /* \"#utility.yul\":3650:3682 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":3731:3745 */\n dup1\n dup3\n gt\n /* \"#utility.yul\":3728:3857 */\n iszero\n tag_109\n jumpi\n /* \"#utility.yul\":3768:3847 */\n tag_109\n tag_75\n jump\t// in\n tag_109:\n /* \"#utility.yul\":3891:3897 */\n dup2\n /* \"#utility.yul\":3880:3889 */\n dup7\n /* \"#utility.yul\":3876:3898 */\n add\n /* \"#utility.yul\":3866:3898 */\n swap2\n pop\n /* \"#utility.yul\":3917:3921 */\n 0x1f\n /* \"#utility.yul\":3957:3960 */\n dup8\n /* \"#utility.yul\":3952:3954 */\n dup2\n /* \"#utility.yul\":3948:3950 */\n dup5\n /* \"#utility.yul\":3944:3955 */\n add\n /* \"#utility.yul\":3940:3961 */\n slt\n /* \"#utility.yul\":3930:4074 */\n tag_111\n jumpi\n /* \"#utility.yul\":3985:4064 */\n tag_111\n tag_76\n jump\t// in\n tag_111:\n /* \"#utility.yul\":4106:4108 */\n dup3\n /* \"#utility.yul\":4093:4109 */\n calldataload\n /* \"#utility.yul\":4129:4187 */\n tag_112\n /* \"#utility.yul\":4145:4186 */\n tag_113\n /* \"#utility.yul\":4183:4185 */\n dup3\n /* \"#utility.yul\":4145:4186 */\n tag_77\n jump\t// in\n tag_113:\n /* \"#utility.yul\":4129:4187 */\n tag_74\n jump\t// in\n tag_112:\n /* \"#utility.yul\":4221:4236 */\n dup2\n dup2\n mstore\n /* \"#utility.yul\":4303:4304 */\n 0x05\n /* \"#utility.yul\":4299:4309 */\n swap2\n swap1\n swap2\n shl\n /* \"#utility.yul\":4291:4310 */\n dup5\n add\n /* \"#utility.yul\":4287:4315 */\n dup6\n add\n swap1\n /* \"#utility.yul\":4252:4264 */\n dup6\n dup2\n add\n swap1\n /* \"#utility.yul\":4327:4342 */\n dup11\n dup4\n gt\n /* \"#utility.yul\":4324:4454 */\n iszero\n tag_115\n jumpi\n /* \"#utility.yul\":4365:4444 */\n tag_115\n tag_78\n jump\t// in\n tag_115:\n /* \"#utility.yul\":4482:4484 */\n dup7\n /* \"#utility.yul\":4478:4480 */\n dup7\n /* \"#utility.yul\":4474:4485 */\n add\n /* \"#utility.yul\":4494:5760 */\n tag_116:\n /* \"#utility.yul\":4510:4516 */\n dup4\n /* \"#utility.yul\":4505:4508 */\n dup2\n /* \"#utility.yul\":4502:4517 */\n lt\n /* \"#utility.yul\":4494:5760 */\n iszero\n tag_118\n jumpi\n /* \"#utility.yul\":4596:4599 */\n dup1\n /* \"#utility.yul\":4583:4600 */\n calldataload\n /* \"#utility.yul\":4632:4634 */\n dup7\n /* \"#utility.yul\":4619:4630 */\n dup2\n /* \"#utility.yul\":4616:4635 */\n gt\n /* \"#utility.yul\":4613:4759 */\n iszero\n tag_120\n jumpi\n /* \"#utility.yul\":4666:4745 */\n tag_120\n tag_76\n jump\t// in\n tag_120:\n /* \"#utility.yul\":4782:4802 */\n dup8\n add\n /* \"#utility.yul\":4837:4839 */\n 0x3f\n /* \"#utility.yul\":4829:4840 */\n dup2\n add\n /* \"#utility.yul\":4825:4846 */\n dup14\n sgt\n /* \"#utility.yul\":4815:4971 */\n tag_122\n jumpi\n /* \"#utility.yul\":4878:4957 */\n tag_122\n tag_76\n jump\t// in\n tag_122:\n /* \"#utility.yul\":5015:5017 */\n dup9\n /* \"#utility.yul\":5011:5013 */\n dup2\n /* \"#utility.yul\":5007:5018 */\n add\n /* \"#utility.yul\":4994:5019 */\n calldataload\n /* \"#utility.yul\":5042:5044 */\n dup8\n /* \"#utility.yul\":5038:5040 */\n dup2\n /* \"#utility.yul\":5035:5045 */\n gt\n /* \"#utility.yul\":5032:5068 */\n iszero\n tag_124\n jumpi\n /* \"#utility.yul\":5048:5066 */\n tag_124\n tag_72\n jump\t// in\n tag_124:\n /* \"#utility.yul\":5094:5145 */\n tag_125\n /* \"#utility.yul\":5118:5129 */\n dup2\n dup9\n add\n not(0x1f)\n /* \"#utility.yul\":5114:5139 */\n and\n /* \"#utility.yul\":5110:5144 */\n dup12\n add\n /* \"#utility.yul\":5094:5145 */\n tag_74\n jump\t// in\n tag_125:\n /* \"#utility.yul\":5172:5174 */\n dup2\n /* \"#utility.yul\":5165:5170 */\n dup2\n /* \"#utility.yul\":5158:5175 */\n mstore\n /* \"#utility.yul\":5216:5219 */\n dup15\n /* \"#utility.yul\":5211:5213 */\n dup13\n /* \"#utility.yul\":5206:5208 */\n dup4\n /* \"#utility.yul\":5202:5204 */\n dup6\n /* \"#utility.yul\":5198:5209 */\n add\n /* \"#utility.yul\":5194:5214 */\n add\n /* \"#utility.yul\":5191:5220 */\n gt\n /* \"#utility.yul\":5188:5582 */\n iszero\n tag_126\n jumpi\n /* \"#utility.yul\":5264:5273 */\n dup12\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":5290:5322 */\n dup2\n mstore\n /* \"#utility.yul\":5357:5358 */\n 0x04\n /* \"#utility.yul\":5346:5359 */\n dup2\n add\n /* \"#utility.yul\":5339:5364 */\n dup13\n swap1\n mstore\n /* \"#utility.yul\":5404:5406 */\n 0x27\n /* \"#utility.yul\":5399:5401 */\n 0x24\n /* \"#utility.yul\":5388:5402 */\n dup3\n add\n /* \"#utility.yul\":5381:5407 */\n mstore\n /* \"#utility.yul\":5447:5481 */\n 0x414249206465636f64696e673a20696e76616c69642062797465206172726179\n /* \"#utility.yul\":5442:5444 */\n 0x44\n /* \"#utility.yul\":5431:5445 */\n dup3\n add\n /* \"#utility.yul\":5424:5482 */\n mstore\n shl(0xcb, 0x040d8cadccee8d)\n /* \"#utility.yul\":5517:5520 */\n 0x64\n /* \"#utility.yul\":5506:5521 */\n dup3\n add\n /* \"#utility.yul\":5499:5533 */\n mstore\n /* \"#utility.yul\":5564:5567 */\n 0x84\n /* \"#utility.yul\":5264:5273 */\n dup2\n /* \"#utility.yul\":5550:5568 */\n revert\n /* \"#utility.yul\":5188:5582 */\n tag_126:\n /* \"#utility.yul\":5637:5639 */\n dup2\n /* \"#utility.yul\":5632:5634 */\n dup13\n /* \"#utility.yul\":5628:5630 */\n dup5\n /* \"#utility.yul\":5624:5635 */\n add\n /* \"#utility.yul\":5619:5621 */\n dup13\n /* \"#utility.yul\":5612:5617 */\n dup4\n /* \"#utility.yul\":5608:5622 */\n add\n /* \"#utility.yul\":5595:5640 */\n calldatacopy\n /* \"#utility.yul\":5685:5686 */\n 0x00\n /* \"#utility.yul\":5664:5678 */\n swap2\n dup2\n add\n /* \"#utility.yul\":5660:5683 */\n dup12\n add\n /* \"#utility.yul\":5653:5687 */\n swap2\n swap1\n swap2\n mstore\n /* \"#utility.yul\":5700:5718 */\n dup5\n mstore\n pop\n /* \"#utility.yul\":5738:5750 */\n swap2\n dup8\n add\n swap2\n /* \"#utility.yul\":4527:4539 */\n dup8\n add\n /* \"#utility.yul\":4494:5760 */\n jump(tag_116)\n tag_118:\n /* \"#utility.yul\":4498:4501 */\n pop\n /* \"#utility.yul\":5792:5797 */\n dup1\n /* \"#utility.yul\":5787:5789 */\n dup8\n /* \"#utility.yul\":5780:5785 */\n dup11\n /* \"#utility.yul\":5776:5790 */\n add\n /* \"#utility.yul\":5769:5798 */\n mstore\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":3174:5804 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5809:5980 */\n tag_80:\n /* \"#utility.yul\":5876:5896 */\n dup1\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":5925:5955 */\n dup2\n and\n /* \"#utility.yul\":5915:5956 */\n dup2\n eq\n /* \"#utility.yul\":5905:5974 */\n tag_128\n jumpi\n /* \"#utility.yul\":5970:5971 */\n 0x00\n /* \"#utility.yul\":5967:5968 */\n dup1\n /* \"#utility.yul\":5960:5972 */\n revert\n /* \"#utility.yul\":5905:5974 */\n tag_128:\n /* \"#utility.yul\":5809:5980 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5985:7091 */\n tag_11:\n /* \"#utility.yul\":6139:6145 */\n 0x00\n /* \"#utility.yul\":6147:6153 */\n dup1\n /* \"#utility.yul\":6155:6161 */\n 0x00\n /* \"#utility.yul\":6163:6169 */\n dup1\n /* \"#utility.yul\":6171:6177 */\n 0x00\n /* \"#utility.yul\":6224:6227 */\n 0xa0\n /* \"#utility.yul\":6212:6221 */\n dup7\n /* \"#utility.yul\":6203:6210 */\n dup9\n /* \"#utility.yul\":6199:6222 */\n sub\n /* \"#utility.yul\":6195:6228 */\n slt\n /* \"#utility.yul\":6192:6340 */\n iszero\n tag_131\n jumpi\n /* \"#utility.yul\":6251:6330 */\n tag_131\n tag_69\n jump\t// in\n tag_131:\n /* \"#utility.yul\":6376:6385 */\n dup6\n /* \"#utility.yul\":6363:6386 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":6446:6448 */\n dup1\n /* \"#utility.yul\":6438:6444 */\n dup3\n /* \"#utility.yul\":6435:6449 */\n gt\n /* \"#utility.yul\":6432:6561 */\n iszero\n tag_133\n jumpi\n /* \"#utility.yul\":6472:6551 */\n tag_133\n tag_70\n jump\t// in\n tag_133:\n /* \"#utility.yul\":6580:6644 */\n tag_134\n /* \"#utility.yul\":6636:6643 */\n dup10\n /* \"#utility.yul\":6627:6633 */\n dup4\n /* \"#utility.yul\":6616:6625 */\n dup11\n /* \"#utility.yul\":6612:6634 */\n add\n /* \"#utility.yul\":6580:6644 */\n tag_79\n jump\t// in\n tag_134:\n /* \"#utility.yul\":6570:6644 */\n swap7\n pop\n /* \"#utility.yul\":6691:6693 */\n 0x20\n /* \"#utility.yul\":6680:6689 */\n dup9\n /* \"#utility.yul\":6676:6694 */\n add\n /* \"#utility.yul\":6663:6695 */\n calldataload\n /* \"#utility.yul\":6653:6695 */\n swap6\n pop\n /* \"#utility.yul\":6742:6744 */\n 0x40\n /* \"#utility.yul\":6731:6740 */\n dup9\n /* \"#utility.yul\":6727:6745 */\n add\n /* \"#utility.yul\":6714:6746 */\n calldataload\n /* \"#utility.yul\":6704:6746 */\n swap5\n pop\n /* \"#utility.yul\":6799:6801 */\n 0x60\n /* \"#utility.yul\":6788:6797 */\n dup9\n /* \"#utility.yul\":6784:6802 */\n add\n /* \"#utility.yul\":6771:6803 */\n calldataload\n /* \"#utility.yul\":6755:6803 */\n swap2\n pop\n /* \"#utility.yul\":6828:6830 */\n dup1\n /* \"#utility.yul\":6818:6826 */\n dup3\n /* \"#utility.yul\":6815:6831 */\n gt\n /* \"#utility.yul\":6812:6943 */\n iszero\n tag_136\n jumpi\n /* \"#utility.yul\":6854:6933 */\n tag_136\n tag_70\n jump\t// in\n tag_136:\n /* \"#utility.yul\":6812:6943 */\n pop\n /* \"#utility.yul\":6962:7028 */\n tag_137\n /* \"#utility.yul\":7020:7027 */\n dup9\n /* \"#utility.yul\":7009:7017 */\n dup3\n /* \"#utility.yul\":6998:7007 */\n dup10\n /* \"#utility.yul\":6994:7018 */\n add\n /* \"#utility.yul\":6962:7028 */\n tag_79\n jump\t// in\n tag_137:\n /* \"#utility.yul\":6952:7028 */\n swap3\n pop\n pop\n /* \"#utility.yul\":7047:7085 */\n tag_138\n /* \"#utility.yul\":7080:7083 */\n 0x80\n /* \"#utility.yul\":7069:7078 */\n dup8\n /* \"#utility.yul\":7065:7084 */\n add\n /* \"#utility.yul\":7047:7085 */\n tag_80\n jump\t// in\n tag_138:\n /* \"#utility.yul\":7037:7085 */\n swap1\n pop\n /* \"#utility.yul\":5985:7091 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":7096:7269 */\n tag_81:\n /* \"#utility.yul\":7164:7184 */\n dup1\n calldataload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":7213:7244 */\n dup2\n and\n /* \"#utility.yul\":7203:7245 */\n dup2\n eq\n /* \"#utility.yul\":7193:7263 */\n tag_128\n jumpi\n /* \"#utility.yul\":7259:7260 */\n 0x00\n /* \"#utility.yul\":7256:7257 */\n dup1\n /* \"#utility.yul\":7249:7261 */\n revert\n /* \"#utility.yul\":7274:8104 */\n tag_15:\n /* \"#utility.yul\":7398:7404 */\n 0x00\n /* \"#utility.yul\":7406:7412 */\n dup1\n /* \"#utility.yul\":7414:7420 */\n 0x00\n /* \"#utility.yul\":7422:7428 */\n dup1\n /* \"#utility.yul\":7430:7436 */\n 0x00\n /* \"#utility.yul\":7483:7486 */\n 0xa0\n /* \"#utility.yul\":7471:7480 */\n dup7\n /* \"#utility.yul\":7462:7469 */\n dup9\n /* \"#utility.yul\":7458:7481 */\n sub\n /* \"#utility.yul\":7454:7487 */\n slt\n /* \"#utility.yul\":7451:7599 */\n iszero\n tag_143\n jumpi\n /* \"#utility.yul\":7510:7589 */\n tag_143\n tag_69\n jump\t// in\n tag_143:\n /* \"#utility.yul\":7618:7647 */\n tag_144\n /* \"#utility.yul\":7637:7646 */\n dup7\n /* \"#utility.yul\":7618:7647 */\n tag_81\n jump\t// in\n tag_144:\n /* \"#utility.yul\":7608:7647 */\n swap5\n pop\n /* \"#utility.yul\":7694:7696 */\n 0x20\n /* \"#utility.yul\":7683:7692 */\n dup7\n /* \"#utility.yul\":7679:7697 */\n add\n /* \"#utility.yul\":7666:7698 */\n calldataload\n /* \"#utility.yul\":7656:7698 */\n swap4\n pop\n /* \"#utility.yul\":7745:7747 */\n 0x40\n /* \"#utility.yul\":7734:7743 */\n dup7\n /* \"#utility.yul\":7730:7748 */\n add\n /* \"#utility.yul\":7717:7749 */\n calldataload\n /* \"#utility.yul\":7707:7749 */\n swap3\n pop\n /* \"#utility.yul\":7800:7802 */\n 0x60\n /* \"#utility.yul\":7789:7798 */\n dup7\n /* \"#utility.yul\":7785:7803 */\n add\n /* \"#utility.yul\":7772:7804 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":7819:7825 */\n dup2\n /* \"#utility.yul\":7816:7846 */\n gt\n /* \"#utility.yul\":7813:7958 */\n iszero\n tag_146\n jumpi\n /* \"#utility.yul\":7869:7948 */\n tag_146\n tag_70\n jump\t// in\n tag_146:\n /* \"#utility.yul\":7977:8041 */\n tag_137\n /* \"#utility.yul\":8033:8040 */\n dup9\n /* \"#utility.yul\":8024:8030 */\n dup3\n /* \"#utility.yul\":8013:8022 */\n dup10\n /* \"#utility.yul\":8009:8031 */\n add\n /* \"#utility.yul\":7977:8041 */\n tag_79\n jump\t// in\n /* \"#utility.yul\":8109:8272 */\n tag_82:\n /* \"#utility.yul\":8176:8196 */\n dup1\n calldataload\n /* \"#utility.yul\":8236:8246 */\n 0xffffffff\n /* \"#utility.yul\":8225:8247 */\n dup2\n and\n /* \"#utility.yul\":8215:8248 */\n dup2\n eq\n /* \"#utility.yul\":8205:8266 */\n tag_128\n jumpi\n /* \"#utility.yul\":8262:8263 */\n 0x00\n /* \"#utility.yul\":8259:8260 */\n dup1\n /* \"#utility.yul\":8252:8264 */\n revert\n /* \"#utility.yul\":8277:10857 */\n tag_19:\n /* \"#utility.yul\":8443:8449 */\n 0x00\n /* \"#utility.yul\":8451:8457 */\n dup1\n /* \"#utility.yul\":8459:8465 */\n 0x00\n /* \"#utility.yul\":8467:8473 */\n dup1\n /* \"#utility.yul\":8520:8523 */\n 0x80\n /* \"#utility.yul\":8508:8517 */\n dup6\n /* \"#utility.yul\":8499:8506 */\n dup8\n /* \"#utility.yul\":8495:8518 */\n sub\n /* \"#utility.yul\":8491:8524 */\n slt\n /* \"#utility.yul\":8488:8636 */\n iszero\n tag_153\n jumpi\n /* \"#utility.yul\":8547:8626 */\n tag_153\n tag_69\n jump\t// in\n tag_153:\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":8713:8715 */\n dup1\n /* \"#utility.yul\":8701:8710 */\n dup7\n /* \"#utility.yul\":8688:8711 */\n calldataload\n /* \"#utility.yul\":8685:8716 */\n gt\n /* \"#utility.yul\":8682:8828 */\n iszero\n tag_155\n jumpi\n /* \"#utility.yul\":8739:8818 */\n tag_155\n tag_70\n jump\t// in\n tag_155:\n /* \"#utility.yul\":8875:8884 */\n dup6\n /* \"#utility.yul\":8862:8885 */\n calldataload\n /* \"#utility.yul\":8851:8860 */\n dup7\n /* \"#utility.yul\":8847:8886 */\n add\n /* \"#utility.yul\":8924:8931 */\n dup8\n /* \"#utility.yul\":8917:8921 */\n 0x1f\n /* \"#utility.yul\":8913:8915 */\n dup3\n /* \"#utility.yul\":8909:8922 */\n add\n /* \"#utility.yul\":8905:8932 */\n slt\n /* \"#utility.yul\":8895:9045 */\n tag_157\n jumpi\n /* \"#utility.yul\":8956:9035 */\n tag_157\n tag_76\n jump\t// in\n tag_157:\n /* \"#utility.yul\":9065:9137 */\n tag_158\n /* \"#utility.yul\":9081:9136 */\n tag_113\n /* \"#utility.yul\":9132:9134 */\n dup3\n /* \"#utility.yul\":9119:9135 */\n calldataload\n /* \"#utility.yul\":9081:9136 */\n tag_77\n jump\t// in\n /* \"#utility.yul\":9065:9137 */\n tag_158:\n /* \"#utility.yul\":9183:9199 */\n dup2\n calldataload\n /* \"#utility.yul\":9171:9200 */\n dup1\n dup3\n mstore\n /* \"#utility.yul\":9225:9229 */\n 0x20\n /* \"#utility.yul\":9216:9230 */\n dup1\n dup4\n add\n swap3\n /* \"#utility.yul\":9159:9162 */\n swap2\n /* \"#utility.yul\":9269:9270 */\n 0x05\n /* \"#utility.yul\":9265:9289 */\n shl\n /* \"#utility.yul\":9257:9290 */\n dup5\n add\n /* \"#utility.yul\":9253:9297 */\n add\n /* \"#utility.yul\":9309:9328 */\n dup11\n dup2\n gt\n /* \"#utility.yul\":9306:9440 */\n iszero\n tag_161\n jumpi\n /* \"#utility.yul\":9351:9430 */\n tag_161\n tag_78\n jump\t// in\n tag_161:\n /* \"#utility.yul\":9468:9472 */\n 0x20\n /* \"#utility.yul\":9464:9466 */\n dup5\n /* \"#utility.yul\":9460:9473 */\n add\n /* \"#utility.yul\":9482:10429 */\n tag_162:\n /* \"#utility.yul\":9498:9504 */\n dup2\n /* \"#utility.yul\":9493:9496 */\n dup2\n /* \"#utility.yul\":9490:9505 */\n lt\n /* \"#utility.yul\":9482:10429 */\n iszero\n tag_164\n jumpi\n /* \"#utility.yul\":9579:9581 */\n dup6\n /* \"#utility.yul\":9573:9576 */\n dup2\n /* \"#utility.yul\":9560:9577 */\n calldataload\n /* \"#utility.yul\":9557:9582 */\n gt\n /* \"#utility.yul\":9554:9706 */\n iszero\n tag_166\n jumpi\n /* \"#utility.yul\":9613:9692 */\n tag_166\n tag_76\n jump\t// in\n tag_166:\n /* \"#utility.yul\":9737:9754 */\n dup1\n calldataload\n /* \"#utility.yul\":9729:9755 */\n dup6\n add\n /* \"#utility.yul\":9807:9811 */\n 0x40\n /* \"#utility.yul\":9779:9795 */\n dup2\n dup15\n sub\n not(0x1f)\n /* \"#utility.yul\":9775:9805 */\n add\n /* \"#utility.yul\":9771:9812 */\n slt\n /* \"#utility.yul\":9768:9936 */\n iszero\n tag_168\n jumpi\n /* \"#utility.yul\":9843:9922 */\n tag_168\n tag_71\n jump\t// in\n tag_168:\n /* \"#utility.yul\":9962:9984 */\n tag_169\n tag_73\n jump\t// in\n tag_169:\n /* \"#utility.yul\":10032:10036 */\n 0x20\n /* \"#utility.yul\":10028:10030 */\n dup3\n /* \"#utility.yul\":10024:10037 */\n add\n /* \"#utility.yul\":10011:10038 */\n calldataload\n /* \"#utility.yul\":10065:10067 */\n dup9\n /* \"#utility.yul\":10057:10063 */\n dup2\n /* \"#utility.yul\":10054:10068 */\n gt\n /* \"#utility.yul\":10051:10192 */\n iszero\n tag_171\n jumpi\n /* \"#utility.yul\":10099:10178 */\n tag_171\n tag_75\n jump\t// in\n tag_171:\n /* \"#utility.yul\":10219:10287 */\n tag_172\n /* \"#utility.yul\":10279:10286 */\n dup16\n /* \"#utility.yul\":10272:10276 */\n 0x20\n /* \"#utility.yul\":10263:10269 */\n dup4\n /* \"#utility.yul\":10259:10261 */\n dup7\n /* \"#utility.yul\":10255:10270 */\n add\n /* \"#utility.yul\":10251:10277 */\n add\n /* \"#utility.yul\":10219:10287 */\n tag_79\n jump\t// in\n tag_172:\n /* \"#utility.yul\":10205:10288 */\n dup3\n mstore\n pop\n /* \"#utility.yul\":10347:10351 */\n 0x40\n /* \"#utility.yul\":10339:10352 */\n swap2\n swap1\n swap2\n add\n /* \"#utility.yul\":10326:10353 */\n calldataload\n /* \"#utility.yul\":10319:10323 */\n 0x20\n /* \"#utility.yul\":10308:10324 */\n dup1\n dup4\n add\n /* \"#utility.yul\":10301:10354 */\n swap2\n swap1\n swap2\n mstore\n /* \"#utility.yul\":10367:10385 */\n swap1\n dup6\n mstore\n /* \"#utility.yul\":10405:10419 */\n swap4\n dup5\n add\n swap4\n /* \"#utility.yul\":9515:9529 */\n add\n /* \"#utility.yul\":9482:10429 */\n jump(tag_162)\n tag_164:\n /* \"#utility.yul\":9486:9489 */\n pop\n pop\n /* \"#utility.yul\":10448:10453 */\n dup1\n /* \"#utility.yul\":10438:10453 */\n swap8\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":10472:10511 */\n tag_173\n /* \"#utility.yul\":10505:10509 */\n 0x20\n /* \"#utility.yul\":10494:10503 */\n dup8\n /* \"#utility.yul\":10490:10510 */\n add\n /* \"#utility.yul\":10472:10511 */\n tag_82\n jump\t// in\n tag_173:\n /* \"#utility.yul\":10462:10511 */\n swap4\n pop\n /* \"#utility.yul\":10564:10568 */\n 0x40\n /* \"#utility.yul\":10553:10562 */\n dup7\n /* \"#utility.yul\":10549:10569 */\n add\n /* \"#utility.yul\":10536:10570 */\n calldataload\n /* \"#utility.yul\":10595:10597 */\n dup2\n /* \"#utility.yul\":10585:10593 */\n dup2\n /* \"#utility.yul\":10582:10598 */\n gt\n /* \"#utility.yul\":10579:10710 */\n iszero\n tag_175\n jumpi\n /* \"#utility.yul\":10621:10700 */\n tag_175\n tag_70\n jump\t// in\n tag_175:\n /* \"#utility.yul\":10729:10795 */\n tag_176\n /* \"#utility.yul\":10787:10794 */\n dup9\n /* \"#utility.yul\":10776:10784 */\n dup3\n /* \"#utility.yul\":10765:10774 */\n dup10\n /* \"#utility.yul\":10761:10785 */\n add\n /* \"#utility.yul\":10729:10795 */\n tag_79\n jump\t// in\n tag_176:\n /* \"#utility.yul\":10719:10795 */\n swap4\n pop\n pop\n pop\n /* \"#utility.yul\":10814:10851 */\n tag_177\n /* \"#utility.yul\":10847:10849 */\n 0x60\n /* \"#utility.yul\":10836:10845 */\n dup7\n /* \"#utility.yul\":10832:10850 */\n add\n /* \"#utility.yul\":10814:10851 */\n tag_80\n jump\t// in\n tag_177:\n /* \"#utility.yul\":10804:10851 */\n swap1\n pop\n /* \"#utility.yul\":8277:10857 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":10862:12975 */\n tag_23:\n /* \"#utility.yul\":11026:11032 */\n 0x00\n /* \"#utility.yul\":11034:11040 */\n dup1\n /* \"#utility.yul\":11042:11048 */\n 0x00\n /* \"#utility.yul\":11050:11056 */\n dup1\n /* \"#utility.yul\":11103:11106 */\n 0x80\n /* \"#utility.yul\":11091:11100 */\n dup6\n /* \"#utility.yul\":11082:11089 */\n dup8\n /* \"#utility.yul\":11078:11101 */\n sub\n /* \"#utility.yul\":11074:11107 */\n slt\n /* \"#utility.yul\":11071:11219 */\n iszero\n tag_180\n jumpi\n /* \"#utility.yul\":11130:11209 */\n tag_180\n tag_69\n jump\t// in\n tag_180:\n /* \"#utility.yul\":11255:11264 */\n dup5\n /* \"#utility.yul\":11242:11265 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":11325:11327 */\n dup1\n /* \"#utility.yul\":11317:11323 */\n dup3\n /* \"#utility.yul\":11314:11328 */\n gt\n /* \"#utility.yul\":11311:11440 */\n iszero\n tag_182\n jumpi\n /* \"#utility.yul\":11351:11430 */\n tag_182\n tag_70\n jump\t// in\n tag_182:\n /* \"#utility.yul\":11474:11480 */\n dup2\n /* \"#utility.yul\":11463:11472 */\n dup8\n /* \"#utility.yul\":11459:11481 */\n add\n /* \"#utility.yul\":11449:11481 */\n swap2\n pop\n /* \"#utility.yul\":11519:11526 */\n dup8\n /* \"#utility.yul\":11512:11516 */\n 0x1f\n /* \"#utility.yul\":11508:11510 */\n dup4\n /* \"#utility.yul\":11504:11517 */\n add\n /* \"#utility.yul\":11500:11527 */\n slt\n /* \"#utility.yul\":11490:11640 */\n tag_184\n jumpi\n /* \"#utility.yul\":11551:11630 */\n tag_184\n tag_76\n jump\t// in\n tag_184:\n /* \"#utility.yul\":11672:11674 */\n dup2\n /* \"#utility.yul\":11659:11675 */\n calldataload\n /* \"#utility.yul\":11694:11698 */\n 0x20\n /* \"#utility.yul\":11718:11776 */\n tag_185\n /* \"#utility.yul\":11734:11775 */\n tag_113\n /* \"#utility.yul\":11772:11774 */\n dup4\n /* \"#utility.yul\":11734:11775 */\n tag_77\n jump\t// in\n /* \"#utility.yul\":11718:11776 */\n tag_185:\n /* \"#utility.yul\":11810:11825 */\n dup3\n dup2\n mstore\n /* \"#utility.yul\":11892:11893 */\n 0x06\n /* \"#utility.yul\":11888:11898 */\n swap3\n swap1\n swap3\n shl\n /* \"#utility.yul\":11880:11899 */\n dup5\n add\n /* \"#utility.yul\":11876:11904 */\n dup2\n add\n swap2\n /* \"#utility.yul\":11841:11853 */\n dup2\n dup2\n add\n swap1\n /* \"#utility.yul\":11916:11935 */\n dup12\n dup5\n gt\n /* \"#utility.yul\":11913:12047 */\n iszero\n tag_188\n jumpi\n /* \"#utility.yul\":11958:12037 */\n tag_188\n tag_78\n jump\t// in\n tag_188:\n /* \"#utility.yul\":12067:12078 */\n swap5\n dup3\n add\n swap5\n /* \"#utility.yul\":12087:12549 */\n tag_189:\n /* \"#utility.yul\":12103:12109 */\n dup4\n /* \"#utility.yul\":12098:12101 */\n dup7\n /* \"#utility.yul\":12095:12110 */\n lt\n /* \"#utility.yul\":12087:12549 */\n iszero\n tag_191\n jumpi\n /* \"#utility.yul\":12185:12189 */\n 0x40\n /* \"#utility.yul\":12179:12182 */\n dup7\n /* \"#utility.yul\":12170:12177 */\n dup14\n /* \"#utility.yul\":12166:12183 */\n sub\n /* \"#utility.yul\":12162:12190 */\n slt\n /* \"#utility.yul\":12159:12314 */\n iszero\n tag_193\n jumpi\n /* \"#utility.yul\":12221:12300 */\n tag_193\n tag_71\n jump\t// in\n tag_193:\n /* \"#utility.yul\":12340:12362 */\n tag_194\n tag_73\n jump\t// in\n tag_194:\n /* \"#utility.yul\":12389:12412 */\n tag_195\n /* \"#utility.yul\":12408:12411 */\n dup8\n /* \"#utility.yul\":12389:12412 */\n tag_81\n jump\t// in\n tag_195:\n /* \"#utility.yul\":12375:12413 */\n dup2\n mstore\n /* \"#utility.yul\":12462:12474 */\n dup7\n dup5\n add\n /* \"#utility.yul\":12449:12475 */\n calldataload\n /* \"#utility.yul\":12433:12447 */\n dup5\n dup3\n add\n /* \"#utility.yul\":12426:12476 */\n mstore\n /* \"#utility.yul\":12489:12507 */\n dup3\n mstore\n /* \"#utility.yul\":12129:12133 */\n 0x40\n /* \"#utility.yul\":12120:12134 */\n swap1\n swap6\n add\n swap5\n /* \"#utility.yul\":12527:12539 */\n swap1\n dup3\n add\n swap1\n /* \"#utility.yul\":12087:12549 */\n jump(tag_189)\n tag_191:\n /* \"#utility.yul\":12568:12573 */\n swap9\n pop\n /* \"#utility.yul\":12592:12629 */\n tag_196\n swap1\n pop\n /* \"#utility.yul\":12610:12628 */\n dup10\n dup3\n add\n /* \"#utility.yul\":12592:12629 */\n tag_82\n jump\t// in\n tag_196:\n /* \"#utility.yul\":12582:12629 */\n swap7\n pop\n pop\n pop\n /* \"#utility.yul\":12682:12686 */\n 0x40\n /* \"#utility.yul\":12671:12680 */\n dup8\n /* \"#utility.yul\":12667:12687 */\n add\n /* \"#utility.yul\":12654:12688 */\n calldataload\n /* \"#utility.yul\":12638:12688 */\n swap2\n pop\n /* \"#utility.yul\":12713:12715 */\n dup1\n /* \"#utility.yul\":12703:12711 */\n dup3\n /* \"#utility.yul\":12700:12716 */\n gt\n /* \"#utility.yul\":12697:12828 */\n iszero\n tag_198\n jumpi\n /* \"#utility.yul\":12739:12818 */\n tag_198\n tag_70\n jump\t// in\n tag_198:\n /* \"#utility.yul\":12697:12828 */\n pop\n /* \"#utility.yul\":12847:12913 */\n tag_199\n /* \"#utility.yul\":12905:12912 */\n dup8\n /* \"#utility.yul\":12894:12902 */\n dup3\n /* \"#utility.yul\":12883:12892 */\n dup9\n /* \"#utility.yul\":12879:12903 */\n add\n /* \"#utility.yul\":12847:12913 */\n tag_79\n jump\t// in\n tag_199:\n /* \"#utility.yul\":12837:12913 */\n swap3\n pop\n pop\n /* \"#utility.yul\":12932:12969 */\n tag_177\n /* \"#utility.yul\":12965:12967 */\n 0x60\n /* \"#utility.yul\":12954:12963 */\n dup7\n /* \"#utility.yul\":12950:12968 */\n add\n /* \"#utility.yul\":12932:12969 */\n tag_80\n jump\t// in\n /* \"#utility.yul\":12980:14017 */\n tag_27:\n /* \"#utility.yul\":13125:13131 */\n 0x00\n /* \"#utility.yul\":13133:13139 */\n dup1\n /* \"#utility.yul\":13141:13147 */\n 0x00\n /* \"#utility.yul\":13149:13155 */\n dup1\n /* \"#utility.yul\":13202:13205 */\n 0x80\n /* \"#utility.yul\":13190:13199 */\n dup6\n /* \"#utility.yul\":13181:13188 */\n dup8\n /* \"#utility.yul\":13177:13200 */\n sub\n /* \"#utility.yul\":13173:13206 */\n slt\n /* \"#utility.yul\":13170:13318 */\n iszero\n tag_203\n jumpi\n /* \"#utility.yul\":13229:13308 */\n tag_203\n tag_69\n jump\t// in\n tag_203:\n /* \"#utility.yul\":13354:13363 */\n dup5\n /* \"#utility.yul\":13341:13364 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":13424:13426 */\n dup1\n /* \"#utility.yul\":13416:13422 */\n dup3\n /* \"#utility.yul\":13413:13427 */\n gt\n /* \"#utility.yul\":13410:13539 */\n iszero\n tag_205\n jumpi\n /* \"#utility.yul\":13450:13529 */\n tag_205\n tag_70\n jump\t// in\n tag_205:\n /* \"#utility.yul\":13558:13622 */\n tag_206\n /* \"#utility.yul\":13614:13621 */\n dup9\n /* \"#utility.yul\":13605:13611 */\n dup4\n /* \"#utility.yul\":13594:13603 */\n dup10\n /* \"#utility.yul\":13590:13612 */\n add\n /* \"#utility.yul\":13558:13622 */\n tag_79\n jump\t// in\n tag_206:\n /* \"#utility.yul\":13548:13622 */\n swap6\n pop\n /* \"#utility.yul\":13669:13671 */\n 0x20\n /* \"#utility.yul\":13658:13667 */\n dup8\n /* \"#utility.yul\":13654:13672 */\n add\n /* \"#utility.yul\":13641:13673 */\n calldataload\n /* \"#utility.yul\":13631:13673 */\n swap5\n pop\n /* \"#utility.yul\":13726:13728 */\n 0x40\n /* \"#utility.yul\":13715:13724 */\n dup8\n /* \"#utility.yul\":13711:13729 */\n add\n /* \"#utility.yul\":13698:13730 */\n calldataload\n /* \"#utility.yul\":13682:13730 */\n swap2\n pop\n /* \"#utility.yul\":13755:13757 */\n dup1\n /* \"#utility.yul\":13745:13753 */\n dup3\n /* \"#utility.yul\":13742:13758 */\n gt\n /* \"#utility.yul\":13739:13870 */\n iszero\n tag_198\n jumpi\n /* \"#utility.yul\":13781:13860 */\n tag_198\n tag_70\n jump\t// in\n /* \"#utility.yul\":14022:14783 */\n tag_31:\n /* \"#utility.yul\":14137:14143 */\n 0x00\n /* \"#utility.yul\":14145:14151 */\n dup1\n /* \"#utility.yul\":14153:14159 */\n 0x00\n /* \"#utility.yul\":14161:14167 */\n dup1\n /* \"#utility.yul\":14214:14217 */\n 0x80\n /* \"#utility.yul\":14202:14211 */\n dup6\n /* \"#utility.yul\":14193:14200 */\n dup8\n /* \"#utility.yul\":14189:14212 */\n sub\n /* \"#utility.yul\":14185:14218 */\n slt\n /* \"#utility.yul\":14182:14330 */\n iszero\n tag_213\n jumpi\n /* \"#utility.yul\":14241:14320 */\n tag_213\n tag_69\n jump\t// in\n tag_213:\n /* \"#utility.yul\":14349:14378 */\n tag_214\n /* \"#utility.yul\":14368:14377 */\n dup6\n /* \"#utility.yul\":14349:14378 */\n tag_81\n jump\t// in\n tag_214:\n /* \"#utility.yul\":14339:14378 */\n swap4\n pop\n /* \"#utility.yul\":14425:14427 */\n 0x20\n /* \"#utility.yul\":14414:14423 */\n dup6\n /* \"#utility.yul\":14410:14428 */\n add\n /* \"#utility.yul\":14397:14429 */\n calldataload\n /* \"#utility.yul\":14387:14429 */\n swap3\n pop\n /* \"#utility.yul\":14480:14482 */\n 0x40\n /* \"#utility.yul\":14469:14478 */\n dup6\n /* \"#utility.yul\":14465:14483 */\n add\n /* \"#utility.yul\":14452:14484 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":14499:14505 */\n dup2\n /* \"#utility.yul\":14496:14526 */\n gt\n /* \"#utility.yul\":14493:14638 */\n iszero\n tag_216\n jumpi\n /* \"#utility.yul\":14549:14628 */\n tag_216\n tag_70\n jump\t// in\n tag_216:\n /* \"#utility.yul\":14657:14721 */\n tag_199\n /* \"#utility.yul\":14713:14720 */\n dup8\n /* \"#utility.yul\":14704:14710 */\n dup3\n /* \"#utility.yul\":14693:14702 */\n dup9\n /* \"#utility.yul\":14689:14711 */\n add\n /* \"#utility.yul\":14657:14721 */\n tag_79\n jump\t// in\n /* \"#utility.yul\":14788:15979 */\n tag_83:\n /* \"#utility.yul\":14844:14847 */\n 0x00\n /* \"#utility.yul\":14883:14887 */\n 0x40\n /* \"#utility.yul\":14878:14881 */\n dup4\n /* \"#utility.yul\":14874:14888 */\n add\n /* \"#utility.yul\":14927:14931 */\n 0xff\n /* \"#utility.yul\":14919:14924 */\n dup4\n /* \"#utility.yul\":14913:14925 */\n mload\n /* \"#utility.yul\":14909:14932 */\n and\n /* \"#utility.yul\":14904:14907 */\n dup5\n /* \"#utility.yul\":14897:14933 */\n mstore\n /* \"#utility.yul\":14952:14956 */\n 0x20\n /* \"#utility.yul\":15002:15004 */\n dup1\n /* \"#utility.yul\":14995:15000 */\n dup5\n /* \"#utility.yul\":14991:15005 */\n add\n /* \"#utility.yul\":14985:15006 */\n mload\n /* \"#utility.yul\":15036:15040 */\n 0x40\n /* \"#utility.yul\":15031:15033 */\n dup3\n /* \"#utility.yul\":15026:15029 */\n dup8\n /* \"#utility.yul\":15022:15034 */\n add\n /* \"#utility.yul\":15015:15041 */\n mstore\n /* \"#utility.yul\":15063:15067 */\n dup3\n /* \"#utility.yul\":15096:15108 */\n dup2\n /* \"#utility.yul\":15090:15109 */\n mload\n /* \"#utility.yul\":15131:15137 */\n dup1\n /* \"#utility.yul\":15125:15129 */\n dup6\n /* \"#utility.yul\":15118:15138 */\n mstore\n /* \"#utility.yul\":15165:15167 */\n 0x60\n /* \"#utility.yul\":15160:15163 */\n dup9\n /* \"#utility.yul\":15156:15168 */\n add\n /* \"#utility.yul\":15147:15168 */\n swap2\n pop\n /* \"#utility.yul\":15221:15223 */\n 0x60\n /* \"#utility.yul\":15211:15217 */\n dup2\n /* \"#utility.yul\":15208:15209 */\n 0x05\n /* \"#utility.yul\":15204:15218 */\n shl\n /* \"#utility.yul\":15199:15202 */\n dup10\n /* \"#utility.yul\":15195:15219 */\n add\n /* \"#utility.yul\":15191:15224 */\n add\n /* \"#utility.yul\":15177:15224 */\n swap5\n pop\n /* \"#utility.yul\":15265:15267 */\n dup4\n /* \"#utility.yul\":15251:15263 */\n dup4\n /* \"#utility.yul\":15247:15268 */\n add\n /* \"#utility.yul\":15233:15268 */\n swap3\n pop\n /* \"#utility.yul\":15286:15287 */\n 0x00\n /* \"#utility.yul\":15307:15308 */\n dup1\n /* \"#utility.yul\":15317:15951 */\n tag_220:\n /* \"#utility.yul\":15333:15339 */\n dup3\n /* \"#utility.yul\":15328:15331 */\n dup2\n /* \"#utility.yul\":15325:15340 */\n lt\n /* \"#utility.yul\":15317:15951 */\n iszero\n tag_222\n jumpi\n /* \"#utility.yul\":15404:15420 */\n dup10\n dup8\n sub\n not(0x5f)\n /* \"#utility.yul\":15400:15430 */\n add\n /* \"#utility.yul\":15386:15431 */\n dup5\n mstore\n /* \"#utility.yul\":15454:15467 */\n dup5\n mload\n /* \"#utility.yul\":15496:15505 */\n dup1\n mload\n /* \"#utility.yul\":15518:15542 */\n dup1\n dup10\n mstore\n /* \"#utility.yul\":15566:15567 */\n dup4\n /* \"#utility.yul\":15580:15737 */\n tag_223:\n /* \"#utility.yul\":15596:15604 */\n dup2\n /* \"#utility.yul\":15591:15594 */\n dup2\n /* \"#utility.yul\":15588:15605 */\n lt\n /* \"#utility.yul\":15580:15737 */\n iszero\n tag_225\n jumpi\n /* \"#utility.yul\":15704:15716 */\n dup3\n dup2\n add\n /* \"#utility.yul\":15700:15721 */\n dup10\n add\n /* \"#utility.yul\":15694:15722 */\n mload\n /* \"#utility.yul\":15671:15687 */\n dup11\n dup3\n add\n /* \"#utility.yul\":15667:15692 */\n dup11\n add\n /* \"#utility.yul\":15660:15723 */\n mstore\n /* \"#utility.yul\":15615:15627 */\n dup9\n add\n /* \"#utility.yul\":15580:15737 */\n jump(tag_223)\n tag_225:\n pop\n /* \"#utility.yul\":15761:15782 */\n dup9\n dup2\n add\n /* \"#utility.yul\":15757:15787 */\n dup9\n add\n /* \"#utility.yul\":15750:15791 */\n dup5\n swap1\n mstore\n /* \"#utility.yul\":15857:15859 */\n 0x1f\n /* \"#utility.yul\":15834:15851 */\n add\n not(0x1f)\n /* \"#utility.yul\":15830:15861 */\n and\n /* \"#utility.yul\":15818:15862 */\n swap1\n swap8\n add\n /* \"#utility.yul\":15814:15867 */\n dup7\n add\n swap7\n pop\n /* \"#utility.yul\":15890:15905 */\n swap4\n dup6\n add\n swap4\n /* \"#utility.yul\":15927:15941 */\n swap3\n dup6\n add\n swap3\n /* \"#utility.yul\":15359:15360 */\n 0x01\n /* \"#utility.yul\":15350:15361 */\n add\n /* \"#utility.yul\":15317:15951 */\n jump(tag_220)\n tag_222:\n pop\n /* \"#utility.yul\":15967:15973 */\n swap5\n swap9\n /* \"#utility.yul\":14788:15979 */\n swap8\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16091:16821 */\n tag_35:\n /* \"#utility.yul\":16450:16453 */\n 0xa0\n /* \"#utility.yul\":16439:16448 */\n dup2\n /* \"#utility.yul\":16432:16454 */\n mstore\n /* \"#utility.yul\":16413:16417 */\n 0x00\n /* \"#utility.yul\":16477:16537 */\n tag_228\n /* \"#utility.yul\":16532:16535 */\n 0xa0\n /* \"#utility.yul\":16521:16530 */\n dup4\n /* \"#utility.yul\":16517:16536 */\n add\n /* \"#utility.yul\":16509:16515 */\n dup9\n /* \"#utility.yul\":16477:16537 */\n tag_83\n jump\t// in\n tag_228:\n /* \"#utility.yul\":16573:16579 */\n dup7\n /* \"#utility.yul\":16568:16570 */\n 0x20\n /* \"#utility.yul\":16557:16566 */\n dup5\n /* \"#utility.yul\":16553:16571 */\n add\n /* \"#utility.yul\":16546:16580 */\n mstore\n /* \"#utility.yul\":16616:16622 */\n dup6\n /* \"#utility.yul\":16611:16613 */\n 0x40\n /* \"#utility.yul\":16600:16609 */\n dup5\n /* \"#utility.yul\":16596:16614 */\n add\n /* \"#utility.yul\":16589:16623 */\n mstore\n /* \"#utility.yul\":16671:16680 */\n dup3\n /* \"#utility.yul\":16663:16669 */\n dup2\n /* \"#utility.yul\":16659:16681 */\n sub\n /* \"#utility.yul\":16654:16656 */\n 0x60\n /* \"#utility.yul\":16643:16652 */\n dup5\n /* \"#utility.yul\":16639:16657 */\n add\n /* \"#utility.yul\":16632:16682 */\n mstore\n /* \"#utility.yul\":16699:16746 */\n tag_229\n /* \"#utility.yul\":16739:16745 */\n dup2\n /* \"#utility.yul\":16731:16737 */\n dup7\n /* \"#utility.yul\":16699:16746 */\n tag_83\n jump\t// in\n tag_229:\n /* \"#utility.yul\":16691:16746 */\n swap2\n pop\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":16787:16793 */\n dup4\n /* \"#utility.yul\":16783:16814 */\n and\n /* \"#utility.yul\":16777:16780 */\n 0x80\n /* \"#utility.yul\":16766:16775 */\n dup4\n /* \"#utility.yul\":16762:16781 */\n add\n /* \"#utility.yul\":16755:16815 */\n mstore\n /* \"#utility.yul\":16091:16821 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16826:17436 */\n tag_41:\n /* \"#utility.yul\":17154:17155 */\n 0x01\n /* \"#utility.yul\":17150:17151 */\n dup1\n /* \"#utility.yul\":17145:17148 */\n 0xa0\n /* \"#utility.yul\":17141:17152 */\n shl\n /* \"#utility.yul\":17137:17156 */\n sub\n /* \"#utility.yul\":17129:17135 */\n dup7\n /* \"#utility.yul\":17125:17157 */\n and\n /* \"#utility.yul\":17114:17123 */\n dup2\n /* \"#utility.yul\":17107:17158 */\n mstore\n /* \"#utility.yul\":17194:17200 */\n dup5\n /* \"#utility.yul\":17189:17191 */\n 0x20\n /* \"#utility.yul\":17178:17187 */\n dup3\n /* \"#utility.yul\":17174:17192 */\n add\n /* \"#utility.yul\":17167:17201 */\n mstore\n /* \"#utility.yul\":17237:17243 */\n dup4\n /* \"#utility.yul\":17232:17234 */\n 0x40\n /* \"#utility.yul\":17221:17230 */\n dup3\n /* \"#utility.yul\":17217:17235 */\n add\n /* \"#utility.yul\":17210:17244 */\n mstore\n /* \"#utility.yul\":17280:17283 */\n 0xa0\n /* \"#utility.yul\":17275:17277 */\n 0x60\n /* \"#utility.yul\":17264:17273 */\n dup3\n /* \"#utility.yul\":17260:17278 */\n add\n /* \"#utility.yul\":17253:17284 */\n mstore\n /* \"#utility.yul\":17088:17092 */\n 0x00\n /* \"#utility.yul\":17301:17361 */\n tag_231\n /* \"#utility.yul\":17356:17359 */\n 0xa0\n /* \"#utility.yul\":17345:17354 */\n dup4\n /* \"#utility.yul\":17341:17360 */\n add\n /* \"#utility.yul\":17333:17339 */\n dup6\n /* \"#utility.yul\":17301:17361 */\n tag_83\n jump\t// in\n tag_231:\n /* \"#utility.yul\":17293:17361 */\n swap1\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":17402:17408 */\n dup4\n /* \"#utility.yul\":17398:17429 */\n and\n /* \"#utility.yul\":17392:17395 */\n 0x80\n /* \"#utility.yul\":17381:17390 */\n dup4\n /* \"#utility.yul\":17377:17396 */\n add\n /* \"#utility.yul\":17370:17430 */\n mstore\n /* \"#utility.yul\":16826:17436 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17540:18981 */\n tag_47:\n /* \"#utility.yul\":17876:17880 */\n 0x00\n /* \"#utility.yul\":17924:17927 */\n 0x80\n /* \"#utility.yul\":17913:17922 */\n dup3\n /* \"#utility.yul\":17909:17928 */\n add\n /* \"#utility.yul\":17955:17958 */\n 0x80\n /* \"#utility.yul\":17944:17953 */\n dup4\n /* \"#utility.yul\":17937:17959 */\n mstore\n /* \"#utility.yul\":17979:17985 */\n dup1\n /* \"#utility.yul\":18014:18020 */\n dup8\n /* \"#utility.yul\":18008:18021 */\n mload\n /* \"#utility.yul\":18045:18051 */\n dup1\n /* \"#utility.yul\":18037:18043 */\n dup4\n /* \"#utility.yul\":18030:18052 */\n mstore\n /* \"#utility.yul\":18083:18086 */\n 0xa0\n /* \"#utility.yul\":18072:18081 */\n dup6\n /* \"#utility.yul\":18068:18087 */\n add\n /* \"#utility.yul\":18061:18087 */\n swap2\n pop\n /* \"#utility.yul\":18146:18149 */\n 0xa0\n /* \"#utility.yul\":18136:18142 */\n dup2\n /* \"#utility.yul\":18133:18134 */\n 0x05\n /* \"#utility.yul\":18129:18143 */\n shl\n /* \"#utility.yul\":18118:18127 */\n dup7\n /* \"#utility.yul\":18114:18144 */\n add\n /* \"#utility.yul\":18110:18150 */\n add\n /* \"#utility.yul\":18096:18150 */\n swap3\n pop\n /* \"#utility.yul\":18169:18173 */\n 0x20\n /* \"#utility.yul\":18208:18210 */\n dup1\n /* \"#utility.yul\":18200:18206 */\n dup11\n /* \"#utility.yul\":18196:18211 */\n add\n /* \"#utility.yul\":18229:18230 */\n 0x00\n /* \"#utility.yul\":18239:18742 */\n tag_234:\n /* \"#utility.yul\":18253:18259 */\n dup4\n /* \"#utility.yul\":18250:18251 */\n dup2\n /* \"#utility.yul\":18247:18260 */\n lt\n /* \"#utility.yul\":18239:18742 */\n iszero\n tag_236\n jumpi\n /* \"#utility.yul\":18346:18349 */\n 0x9f\n /* \"#utility.yul\":18342:18350 */\n not\n /* \"#utility.yul\":18330:18339 */\n dup9\n /* \"#utility.yul\":18322:18328 */\n dup8\n /* \"#utility.yul\":18318:18340 */\n sub\n /* \"#utility.yul\":18314:18351 */\n add\n /* \"#utility.yul\":18309:18312 */\n dup6\n /* \"#utility.yul\":18302:18352 */\n mstore\n /* \"#utility.yul\":18381:18387 */\n dup2\n /* \"#utility.yul\":18375:18388 */\n mload\n /* \"#utility.yul\":18411:18415 */\n 0x40\n /* \"#utility.yul\":18454:18456 */\n dup2\n /* \"#utility.yul\":18448:18457 */\n mload\n /* \"#utility.yul\":18485:18487 */\n dup2\n /* \"#utility.yul\":18477:18483 */\n dup10\n /* \"#utility.yul\":18470:18488 */\n mstore\n /* \"#utility.yul\":18515:18577 */\n tag_237\n /* \"#utility.yul\":18573:18575 */\n dup3\n /* \"#utility.yul\":18565:18571 */\n dup11\n /* \"#utility.yul\":18561:18576 */\n add\n /* \"#utility.yul\":18547:18559 */\n dup3\n /* \"#utility.yul\":18515:18577 */\n tag_83\n jump\t// in\n tag_237:\n /* \"#utility.yul\":18620:18631 */\n swap3\n dup7\n add\n /* \"#utility.yul\":18614:18632 */\n mload\n /* \"#utility.yul\":18597:18612 */\n swap9\n dup7\n add\n /* \"#utility.yul\":18590:18633 */\n swap9\n swap1\n swap9\n mstore\n pop\n /* \"#utility.yul\":18501:18577 */\n swap6\n pop\n /* \"#utility.yul\":18720:18732 */\n swap4\n dup3\n add\n swap4\n /* \"#utility.yul\":18685:18700 */\n swap1\n dup3\n add\n swap1\n /* \"#utility.yul\":18275:18276 */\n 0x01\n /* \"#utility.yul\":18268:18277 */\n add\n /* \"#utility.yul\":18239:18742 */\n jump(tag_234)\n tag_236:\n pop\n pop\n /* \"#utility.yul\":17517:17527 */\n 0xffffffff\n /* \"#utility.yul\":17506:17528 */\n dup10\n and\n /* \"#utility.yul\":18777:18795 */\n swap1\n dup7\n add\n /* \"#utility.yul\":17494:17529 */\n mstore\n pop\n pop\n /* \"#utility.yul\":18834:18856 */\n dup3\n dup2\n sub\n /* \"#utility.yul\":18827:18831 */\n 0x40\n /* \"#utility.yul\":18812:18832 */\n dup5\n add\n /* \"#utility.yul\":18805:18857 */\n mstore\n /* \"#utility.yul\":18874:18921 */\n tag_239\n /* \"#utility.yul\":18838:18844 */\n dup2\n /* \"#utility.yul\":18906:18912 */\n dup7\n /* \"#utility.yul\":18874:18921 */\n tag_83\n jump\t// in\n tag_239:\n /* \"#utility.yul\":18866:18921 */\n swap2\n pop\n pop\n /* \"#utility.yul\":18930:18975 */\n tag_240\n /* \"#utility.yul\":18971:18973 */\n 0x60\n /* \"#utility.yul\":18960:18969 */\n dup4\n /* \"#utility.yul\":18956:18974 */\n add\n /* \"#utility.yul\":18948:18954 */\n dup5\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":16049:16079 */\n and\n /* \"#utility.yul\":16037:16080 */\n swap1\n mstore\n /* \"#utility.yul\":15984:16086 */\n jump\n /* \"#utility.yul\":18930:18975 */\n tag_240:\n /* \"#utility.yul\":17540:18981 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18986:20153 */\n tag_53:\n /* \"#utility.yul\":19366:19369 */\n 0x80\n /* \"#utility.yul\":19379:19401 */\n dup1\n dup3\n mstore\n /* \"#utility.yul\":19450:19463 */\n dup6\n mload\n /* \"#utility.yul\":19351:19370 */\n swap1\n dup3\n add\n /* \"#utility.yul\":19472:19494 */\n dup2\n swap1\n mstore\n /* \"#utility.yul\":19318:19322 */\n 0x00\n swap1\n /* \"#utility.yul\":19548:19552 */\n 0x20\n swap1\n /* \"#utility.yul\":19525:19528 */\n 0xa0\n /* \"#utility.yul\":19510:19529 */\n dup5\n add\n swap1\n /* \"#utility.yul\":19575:19590 */\n dup3\n dup10\n add\n /* \"#utility.yul\":19318:19322 */\n dup5\n /* \"#utility.yul\":19618:19900 */\n tag_242:\n /* \"#utility.yul\":19632:19638 */\n dup3\n /* \"#utility.yul\":19629:19630 */\n dup2\n /* \"#utility.yul\":19626:19639 */\n lt\n /* \"#utility.yul\":19618:19900 */\n iszero\n tag_244\n jumpi\n /* \"#utility.yul\":19691:19704 */\n dup2\n mload\n /* \"#utility.yul\":19733:19742 */\n dup1\n mload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":19729:19764 */\n and\n /* \"#utility.yul\":19717:19765 */\n dup6\n mstore\n /* \"#utility.yul\":19805:19816 */\n dup6\n add\n /* \"#utility.yul\":19799:19817 */\n mload\n /* \"#utility.yul\":19785:19797 */\n dup6\n dup6\n add\n /* \"#utility.yul\":19778:19818 */\n mstore\n /* \"#utility.yul\":19847:19851 */\n 0x40\n /* \"#utility.yul\":19838:19852 */\n swap1\n swap4\n add\n swap3\n /* \"#utility.yul\":19875:19890 */\n swap1\n dup5\n add\n swap1\n /* \"#utility.yul\":19761:19762 */\n 0x01\n /* \"#utility.yul\":19647:19656 */\n add\n /* \"#utility.yul\":19618:19900 */\n jump(tag_242)\n tag_244:\n /* \"#utility.yul\":19622:19625 */\n pop\n pop\n pop\n /* \"#utility.yul\":19948:19958 */\n 0xffffffff\n /* \"#utility.yul\":19940:19946 */\n dup8\n /* \"#utility.yul\":19936:19959 */\n and\n /* \"#utility.yul\":19931:19933 */\n dup3\n /* \"#utility.yul\":19920:19929 */\n dup6\n /* \"#utility.yul\":19916:19934 */\n add\n /* \"#utility.yul\":19909:19960 */\n mstore\n /* \"#utility.yul\":20007:20016 */\n dup4\n /* \"#utility.yul\":20002:20005 */\n dup2\n /* \"#utility.yul\":19998:20017 */\n sub\n /* \"#utility.yul\":19991:19995 */\n 0x40\n /* \"#utility.yul\":19980:19989 */\n dup6\n /* \"#utility.yul\":19976:19996 */\n add\n /* \"#utility.yul\":19969:20018 */\n mstore\n /* \"#utility.yul\":20035:20079 */\n tag_245\n /* \"#utility.yul\":20075:20078 */\n dup2\n /* \"#utility.yul\":20067:20073 */\n dup8\n /* \"#utility.yul\":20035:20079 */\n tag_83\n jump\t// in\n tag_245:\n /* \"#utility.yul\":20027:20079 */\n swap3\n pop\n pop\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":20119:20125 */\n dup4\n /* \"#utility.yul\":20115:20146 */\n and\n /* \"#utility.yul\":20110:20112 */\n 0x60\n /* \"#utility.yul\":20099:20108 */\n dup4\n /* \"#utility.yul\":20095:20113 */\n add\n /* \"#utility.yul\":20088:20147 */\n mstore\n /* \"#utility.yul\":18986:20153 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20158:20816 */\n tag_59:\n /* \"#utility.yul\":20489:20492 */\n 0x80\n /* \"#utility.yul\":20478:20487 */\n dup2\n /* \"#utility.yul\":20471:20493 */\n mstore\n /* \"#utility.yul\":20452:20456 */\n 0x00\n /* \"#utility.yul\":20516:20576 */\n tag_247\n /* \"#utility.yul\":20571:20574 */\n 0x80\n /* \"#utility.yul\":20560:20569 */\n dup4\n /* \"#utility.yul\":20556:20575 */\n add\n /* \"#utility.yul\":20548:20554 */\n dup8\n /* \"#utility.yul\":20516:20576 */\n tag_83\n jump\t// in\n tag_247:\n /* \"#utility.yul\":20612:20618 */\n dup6\n /* \"#utility.yul\":20607:20609 */\n 0x20\n /* \"#utility.yul\":20596:20605 */\n dup5\n /* \"#utility.yul\":20592:20610 */\n add\n /* \"#utility.yul\":20585:20619 */\n mstore\n /* \"#utility.yul\":20667:20676 */\n dup3\n /* \"#utility.yul\":20659:20665 */\n dup2\n /* \"#utility.yul\":20655:20677 */\n sub\n /* \"#utility.yul\":20650:20652 */\n 0x40\n /* \"#utility.yul\":20639:20648 */\n dup5\n /* \"#utility.yul\":20635:20653 */\n add\n /* \"#utility.yul\":20628:20678 */\n mstore\n /* \"#utility.yul\":20695:20742 */\n tag_248\n /* \"#utility.yul\":20735:20741 */\n dup2\n /* \"#utility.yul\":20727:20733 */\n dup7\n /* \"#utility.yul\":20695:20742 */\n tag_83\n jump\t// in\n tag_248:\n /* \"#utility.yul\":20687:20742 */\n swap2\n pop\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":20782:20788 */\n dup4\n /* \"#utility.yul\":20778:20809 */\n and\n /* \"#utility.yul\":20773:20775 */\n 0x60\n /* \"#utility.yul\":20762:20771 */\n dup4\n /* \"#utility.yul\":20758:20776 */\n add\n /* \"#utility.yul\":20751:20810 */\n mstore\n /* \"#utility.yul\":20158:20816 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20821:21359 */\n tag_65:\n /* \"#utility.yul\":21121:21122 */\n 0x01\n /* \"#utility.yul\":21117:21118 */\n dup1\n /* \"#utility.yul\":21112:21115 */\n 0xa0\n /* \"#utility.yul\":21108:21119 */\n shl\n /* \"#utility.yul\":21104:21123 */\n sub\n /* \"#utility.yul\":21096:21102 */\n dup6\n /* \"#utility.yul\":21092:21124 */\n and\n /* \"#utility.yul\":21081:21090 */\n dup2\n /* \"#utility.yul\":21074:21125 */\n mstore\n /* \"#utility.yul\":21161:21167 */\n dup4\n /* \"#utility.yul\":21156:21158 */\n 0x20\n /* \"#utility.yul\":21145:21154 */\n dup3\n /* \"#utility.yul\":21141:21159 */\n add\n /* \"#utility.yul\":21134:21168 */\n mstore\n /* \"#utility.yul\":21204:21207 */\n 0x80\n /* \"#utility.yul\":21199:21201 */\n 0x40\n /* \"#utility.yul\":21188:21197 */\n dup3\n /* \"#utility.yul\":21184:21202 */\n add\n /* \"#utility.yul\":21177:21208 */\n mstore\n /* \"#utility.yul\":21055:21059 */\n 0x00\n /* \"#utility.yul\":21225:21285 */\n tag_250\n /* \"#utility.yul\":21280:21283 */\n 0x80\n /* \"#utility.yul\":21269:21278 */\n dup4\n /* \"#utility.yul\":21265:21284 */\n add\n /* \"#utility.yul\":21257:21263 */\n dup6\n /* \"#utility.yul\":21225:21285 */\n tag_83\n jump\t// in\n tag_250:\n /* \"#utility.yul\":21217:21285 */\n swap1\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":21325:21331 */\n dup4\n /* \"#utility.yul\":21321:21352 */\n and\n /* \"#utility.yul\":21316:21318 */\n 0x60\n /* \"#utility.yul\":21305:21314 */\n dup4\n /* \"#utility.yul\":21301:21319 */\n add\n /* \"#utility.yul\":21294:21353 */\n mstore\n /* \"#utility.yul\":20821:21359 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212202085c2310b813aa1a9795bbb224210110ff7fcebe903592aa6e53d5dd059fe5964736f6c63430008130033\n}\n", + "assembly": " /* \"XTokensInstance.sol\":119:2115 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x22\n 0x24\n dup3\n add\n mstore\n 0x45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xf1, 0x37b7)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"XTokensInstance.sol\":119:2115 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x22\n 0x24\n dup3\n add\n mstore\n 0x45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xf1, 0x37b7)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x150c016a\n eq\n tag_3\n jumpi\n dup1\n 0x3e506ef0\n eq\n tag_4\n jumpi\n dup1\n 0x797b45fd\n eq\n tag_5\n jumpi\n dup1\n 0xab946323\n eq\n tag_6\n jumpi\n dup1\n 0xb4f76f96\n eq\n tag_7\n jumpi\n dup1\n 0xb9f813ff\n eq\n tag_8\n jumpi\n tag_2:\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x35\n 0x24\n dup3\n add\n mstore\n 0x436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b20\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0x58, 0x6e6f7220726563656976652066756e6374696f6e73)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n /* \"XTokensInstance.sol\":1058:1433 function transferMultiassetWithFee(... */\n tag_3:\n tag_9\n tag_10\n calldatasize\n 0x04\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"XTokensInstance.sol\":419:781 function transferWithFee(... */\n tag_4:\n tag_9\n tag_14\n calldatasize\n 0x04\n tag_15\n jump\t// in\n tag_14:\n tag_16\n jump\t// in\n /* \"XTokensInstance.sol\":1786:2113 function transferMultiAssets(... */\n tag_5:\n tag_9\n tag_18\n calldatasize\n 0x04\n tag_19\n jump\t// in\n tag_18:\n tag_20\n jump\t// in\n /* \"XTokensInstance.sol\":1439:1780 function transferMultiCurrencies(... */\n tag_6:\n tag_9\n tag_22\n calldatasize\n 0x04\n tag_23\n jump\t// in\n tag_22:\n tag_24\n jump\t// in\n /* \"XTokensInstance.sol\":787:1052 function transferMultiasset(... */\n tag_7:\n tag_9\n tag_26\n calldatasize\n 0x04\n tag_27\n jump\t// in\n tag_26:\n tag_28\n jump\t// in\n /* \"XTokensInstance.sol\":161:413 function transfer(... */\n tag_8:\n tag_9\n tag_30\n calldatasize\n 0x04\n tag_31\n jump\t// in\n tag_30:\n tag_32\n jump\t// in\n /* \"XTokensInstance.sol\":1058:1433 function transferMultiassetWithFee(... */\n tag_12:\n /* \"XTokensInstance.sol\":1273:1426 XTOKENS_CONTRACT.transferMultiassetWithFee(... */\n mload(0x40)\n shl(0xe1, 0x0a8600b5)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":1273:1315 XTOKENS_CONTRACT.transferMultiassetWithFee */\n 0x150c016a\n swap1\n /* \"XTokensInstance.sol\":1273:1426 XTOKENS_CONTRACT.transferMultiassetWithFee(... */\n tag_34\n swap1\n /* \"XTokensInstance.sol\":1329:1334 asset */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1348:1354 amount */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1368:1371 fee */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1385:1396 destination */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1410:1416 weight */\n dup9\n swap1\n /* \"XTokensInstance.sol\":1273:1426 XTOKENS_CONTRACT.transferMultiassetWithFee(... */\n 0x04\n add\n tag_35\n jump\t// in\n tag_34:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_36\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x25\n 0x24\n dup3\n add\n mstore\n 0x54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xd8, 0x20636f6465)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n tag_36:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_38\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_38:\n pop\n pop\n pop\n pop\n /* \"XTokensInstance.sol\":1058:1433 function transferMultiassetWithFee(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"XTokensInstance.sol\":419:781 function transferWithFee(... */\n tag_16:\n /* \"XTokensInstance.sol\":621:774 XTOKENS_CONTRACT.transferWithFee(... */\n mload(0x40)\n shl(0xe4, 0x03e506ef)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":621:653 XTOKENS_CONTRACT.transferWithFee */\n 0x3e506ef0\n swap1\n /* \"XTokensInstance.sol\":621:774 XTOKENS_CONTRACT.transferWithFee(... */\n tag_34\n swap1\n /* \"XTokensInstance.sol\":667:682 currencyAddress */\n dup9\n swap1\n /* \"XTokensInstance.sol\":696:702 amount */\n dup9\n swap1\n /* \"XTokensInstance.sol\":716:719 fee */\n dup9\n swap1\n /* \"XTokensInstance.sol\":733:744 destination */\n dup9\n swap1\n /* \"XTokensInstance.sol\":758:764 weight */\n dup9\n swap1\n /* \"XTokensInstance.sol\":621:774 XTOKENS_CONTRACT.transferWithFee(... */\n 0x04\n add\n tag_41\n jump\t// in\n /* \"XTokensInstance.sol\":1786:2113 function transferMultiAssets(... */\n tag_20:\n /* \"XTokensInstance.sol\":1974:2106 XTOKENS_CONTRACT.transferMultiAssets(... */\n mload(0x40)\n shl(0xe0, 0x797b45fd)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":1974:2010 XTOKENS_CONTRACT.transferMultiAssets */\n 0x797b45fd\n swap1\n /* \"XTokensInstance.sol\":1974:2106 XTOKENS_CONTRACT.transferMultiAssets(... */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":2024:2030 assets */\n dup8\n swap1\n /* \"XTokensInstance.sol\":2044:2051 feeItem */\n dup8\n swap1\n /* \"XTokensInstance.sol\":2065:2076 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":2090:2096 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1974:2106 XTOKENS_CONTRACT.transferMultiAssets(... */\n 0x04\n add\n tag_47\n jump\t// in\n tag_46:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_48\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x20\n 0x04\n dup3\n add\n mstore\n 0x25\n 0x24\n dup3\n add\n mstore\n 0x54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e\n 0x44\n dup3\n add\n swap1\n dup2\n mstore\n shl(0xd8, 0x20636f6465)\n 0x64\n dup4\n add\n mstore\n 0x84\n dup3\n revert\n tag_48:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_50\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_50:\n pop\n pop\n pop\n pop\n /* \"XTokensInstance.sol\":1786:2113 function transferMultiAssets(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"XTokensInstance.sol\":1439:1780 function transferMultiCurrencies(... */\n tag_24:\n /* \"XTokensInstance.sol\":1633:1773 XTOKENS_CONTRACT.transferMultiCurrencies(... */\n mload(0x40)\n shl(0xe0, 0xab946323)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":1633:1673 XTOKENS_CONTRACT.transferMultiCurrencies */\n 0xab946323\n swap1\n /* \"XTokensInstance.sol\":1633:1773 XTOKENS_CONTRACT.transferMultiCurrencies(... */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":1687:1697 currencies */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1711:1718 feeItem */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1732:1743 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1757:1763 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1633:1773 XTOKENS_CONTRACT.transferMultiCurrencies(... */\n 0x04\n add\n tag_53\n jump\t// in\n /* \"XTokensInstance.sol\":787:1052 function transferMultiasset(... */\n tag_28:\n /* \"XTokensInstance.sol\":974:1045 XTOKENS_CONTRACT.transferMultiasset(asset, amount, destination, weight) */\n mload(0x40)\n shl(0xe1, 0x5a7bb7cb)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":974:1009 XTOKENS_CONTRACT.transferMultiasset */\n 0xb4f76f96\n swap1\n /* \"XTokensInstance.sol\":974:1045 XTOKENS_CONTRACT.transferMultiasset(asset, amount, destination, weight) */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":1010:1015 asset */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1017:1023 amount */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1025:1036 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":1038:1044 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":974:1045 XTOKENS_CONTRACT.transferMultiasset(asset, amount, destination, weight) */\n 0x04\n add\n tag_59\n jump\t// in\n /* \"XTokensInstance.sol\":161:413 function transfer(... */\n tag_32:\n /* \"XTokensInstance.sol\":335:406 XTOKENS_CONTRACT.transfer(currencyAddress, amount, destination, weight) */\n mload(0x40)\n shl(0xe0, 0xb9f813ff)\n dup2\n mstore\n /* \"precompiles/xtokens/Xtokens.sol\":143:185 */\n 0x0804\n swap1\n /* \"XTokensInstance.sol\":335:360 XTOKENS_CONTRACT.transfer */\n 0xb9f813ff\n swap1\n /* \"XTokensInstance.sol\":335:406 XTOKENS_CONTRACT.transfer(currencyAddress, amount, destination, weight) */\n tag_46\n swap1\n /* \"XTokensInstance.sol\":361:376 currencyAddress */\n dup8\n swap1\n /* \"XTokensInstance.sol\":378:384 amount */\n dup8\n swap1\n /* \"XTokensInstance.sol\":386:397 destination */\n dup8\n swap1\n /* \"XTokensInstance.sol\":399:405 weight */\n dup8\n swap1\n /* \"XTokensInstance.sol\":335:406 XTOKENS_CONTRACT.transfer(currencyAddress, amount, destination, weight) */\n 0x04\n add\n tag_65\n jump\t// in\n /* \"#utility.yul\":14:389 */\n tag_69:\n /* \"#utility.yul\":136:138 */\n 0x40\n /* \"#utility.yul\":130:139 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":148:180 */\n dup2\n mstore\n /* \"#utility.yul\":211:215 */\n 0x20\n /* \"#utility.yul\":207:208 */\n 0x04\n /* \"#utility.yul\":196:209 */\n dup3\n add\n /* \"#utility.yul\":189:216 */\n mstore\n /* \"#utility.yul\":248:250 */\n 0x22\n /* \"#utility.yul\":243:245 */\n 0x24\n /* \"#utility.yul\":232:246 */\n dup3\n add\n /* \"#utility.yul\":225:251 */\n mstore\n /* \"#utility.yul\":283:317 */\n 0x414249206465636f64696e673a207475706c65206461746120746f6f2073686f\n /* \"#utility.yul\":278:280 */\n 0x44\n /* \"#utility.yul\":267:281 */\n dup3\n add\n /* \"#utility.yul\":260:318 */\n mstore\n shl(0xf2, 0x1c9d)\n /* \"#utility.yul\":345:348 */\n 0x64\n /* \"#utility.yul\":334:349 */\n dup3\n add\n /* \"#utility.yul\":327:356 */\n mstore\n /* \"#utility.yul\":379:382 */\n 0x84\n /* \"#utility.yul\":130:139 */\n dup2\n /* \"#utility.yul\":365:383 */\n revert\n /* \"#utility.yul\":394:769 */\n tag_70:\n /* \"#utility.yul\":516:518 */\n 0x40\n /* \"#utility.yul\":510:519 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":528:560 */\n dup2\n mstore\n /* \"#utility.yul\":591:595 */\n 0x20\n /* \"#utility.yul\":587:588 */\n 0x04\n /* \"#utility.yul\":576:589 */\n dup3\n add\n /* \"#utility.yul\":569:596 */\n mstore\n /* \"#utility.yul\":628:630 */\n 0x22\n /* \"#utility.yul\":623:625 */\n 0x24\n /* \"#utility.yul\":612:626 */\n dup3\n add\n /* \"#utility.yul\":605:631 */\n mstore\n /* \"#utility.yul\":663:697 */\n 0x414249206465636f64696e673a20696e76616c6964207475706c65206f666673\n /* \"#utility.yul\":658:660 */\n 0x44\n /* \"#utility.yul\":647:661 */\n dup3\n add\n /* \"#utility.yul\":640:698 */\n mstore\n shl(0xf2, 0x195d)\n /* \"#utility.yul\":725:728 */\n 0x64\n /* \"#utility.yul\":714:729 */\n dup3\n add\n /* \"#utility.yul\":707:736 */\n mstore\n /* \"#utility.yul\":759:762 */\n 0x84\n /* \"#utility.yul\":510:519 */\n dup2\n /* \"#utility.yul\":745:763 */\n revert\n /* \"#utility.yul\":774:1150 */\n tag_71:\n /* \"#utility.yul\":896:898 */\n 0x40\n /* \"#utility.yul\":890:899 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":908:940 */\n dup2\n mstore\n /* \"#utility.yul\":971:975 */\n 0x20\n /* \"#utility.yul\":967:968 */\n 0x04\n /* \"#utility.yul\":956:969 */\n dup3\n add\n /* \"#utility.yul\":949:976 */\n mstore\n /* \"#utility.yul\":1008:1010 */\n 0x23\n /* \"#utility.yul\":1003:1005 */\n 0x24\n /* \"#utility.yul\":992:1006 */\n dup3\n add\n /* \"#utility.yul\":985:1011 */\n mstore\n /* \"#utility.yul\":1043:1077 */\n 0x414249206465636f64696e673a20737472756374206461746120746f6f207368\n /* \"#utility.yul\":1038:1040 */\n 0x44\n /* \"#utility.yul\":1027:1041 */\n dup3\n add\n /* \"#utility.yul\":1020:1078 */\n mstore\n shl(0xea, 0x1bdc9d)\n /* \"#utility.yul\":1105:1108 */\n 0x64\n /* \"#utility.yul\":1094:1109 */\n dup3\n add\n /* \"#utility.yul\":1087:1117 */\n mstore\n /* \"#utility.yul\":1140:1143 */\n 0x84\n /* \"#utility.yul\":890:899 */\n dup2\n /* \"#utility.yul\":1126:1144 */\n revert\n /* \"#utility.yul\":1155:1282 */\n tag_72:\n /* \"#utility.yul\":1216:1226 */\n 0x4e487b71\n /* \"#utility.yul\":1211:1214 */\n 0xe0\n /* \"#utility.yul\":1207:1227 */\n shl\n /* \"#utility.yul\":1204:1205 */\n 0x00\n /* \"#utility.yul\":1197:1228 */\n mstore\n /* \"#utility.yul\":1247:1251 */\n 0x41\n /* \"#utility.yul\":1244:1245 */\n 0x04\n /* \"#utility.yul\":1237:1252 */\n mstore\n /* \"#utility.yul\":1271:1275 */\n 0x24\n /* \"#utility.yul\":1268:1269 */\n 0x00\n /* \"#utility.yul\":1261:1276 */\n revert\n /* \"#utility.yul\":1287:1544 */\n tag_73:\n /* \"#utility.yul\":1359:1363 */\n 0x40\n /* \"#utility.yul\":1353:1364 */\n dup1\n mload\n swap1\n /* \"#utility.yul\":1391:1408 */\n dup2\n add\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":1423:1457 */\n dup2\n gt\n /* \"#utility.yul\":1459:1481 */\n dup3\n dup3\n lt\n /* \"#utility.yul\":1420:1482 */\n or\n /* \"#utility.yul\":1417:1505 */\n iszero\n tag_93\n jumpi\n /* \"#utility.yul\":1485:1503 */\n tag_93\n tag_72\n jump\t// in\n tag_93:\n /* \"#utility.yul\":1521:1525 */\n 0x40\n /* \"#utility.yul\":1514:1538 */\n mstore\n /* \"#utility.yul\":1287:1544 */\n swap1\n jump\t// out\n /* \"#utility.yul\":1549:1824 */\n tag_74:\n /* \"#utility.yul\":1620:1622 */\n 0x40\n /* \"#utility.yul\":1614:1623 */\n mload\n /* \"#utility.yul\":1685:1687 */\n 0x1f\n /* \"#utility.yul\":1666:1679 */\n dup3\n add\n not(0x1f)\n /* \"#utility.yul\":1662:1689 */\n and\n /* \"#utility.yul\":1650:1690 */\n dup2\n add\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":1705:1739 */\n dup2\n gt\n /* \"#utility.yul\":1741:1763 */\n dup3\n dup3\n lt\n /* \"#utility.yul\":1702:1764 */\n or\n /* \"#utility.yul\":1699:1787 */\n iszero\n tag_96\n jumpi\n /* \"#utility.yul\":1767:1785 */\n tag_96\n tag_72\n jump\t// in\n tag_96:\n /* \"#utility.yul\":1803:1805 */\n 0x40\n /* \"#utility.yul\":1796:1818 */\n mstore\n /* \"#utility.yul\":1549:1824 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1829:2205 */\n tag_75:\n /* \"#utility.yul\":1951:1953 */\n 0x40\n /* \"#utility.yul\":1945:1954 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":1963:1995 */\n dup2\n mstore\n /* \"#utility.yul\":2026:2030 */\n 0x20\n /* \"#utility.yul\":2022:2023 */\n 0x04\n /* \"#utility.yul\":2011:2024 */\n dup3\n add\n /* \"#utility.yul\":2004:2031 */\n mstore\n /* \"#utility.yul\":2063:2065 */\n 0x23\n /* \"#utility.yul\":2058:2060 */\n 0x24\n /* \"#utility.yul\":2047:2061 */\n dup3\n add\n /* \"#utility.yul\":2040:2066 */\n mstore\n /* \"#utility.yul\":2098:2132 */\n 0x414249206465636f64696e673a20696e76616c696420737472756374206f6666\n /* \"#utility.yul\":2093:2095 */\n 0x44\n /* \"#utility.yul\":2082:2096 */\n dup3\n add\n /* \"#utility.yul\":2075:2133 */\n mstore\n shl(0xea, 0x1cd95d)\n /* \"#utility.yul\":2160:2163 */\n 0x64\n /* \"#utility.yul\":2149:2164 */\n dup3\n add\n /* \"#utility.yul\":2142:2172 */\n mstore\n /* \"#utility.yul\":2195:2198 */\n 0x84\n /* \"#utility.yul\":1945:1954 */\n dup2\n /* \"#utility.yul\":2181:2199 */\n revert\n /* \"#utility.yul\":2210:2594 */\n tag_76:\n /* \"#utility.yul\":2332:2334 */\n 0x40\n /* \"#utility.yul\":2326:2335 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":2344:2376 */\n dup2\n mstore\n /* \"#utility.yul\":2407:2411 */\n 0x20\n /* \"#utility.yul\":2403:2404 */\n 0x04\n /* \"#utility.yul\":2392:2405 */\n dup3\n add\n /* \"#utility.yul\":2385:2412 */\n mstore\n /* \"#utility.yul\":2444:2446 */\n 0x2b\n /* \"#utility.yul\":2439:2441 */\n 0x24\n /* \"#utility.yul\":2428:2442 */\n dup3\n add\n /* \"#utility.yul\":2421:2447 */\n mstore\n /* \"#utility.yul\":2479:2513 */\n 0x414249206465636f64696e673a20696e76616c69642063616c6c646174612061\n /* \"#utility.yul\":2474:2476 */\n 0x44\n /* \"#utility.yul\":2463:2477 */\n dup3\n add\n /* \"#utility.yul\":2456:2514 */\n mstore\n shl(0xaa, 0x1c9c985e481bd9999cd95d)\n /* \"#utility.yul\":2541:2544 */\n 0x64\n /* \"#utility.yul\":2530:2545 */\n dup3\n add\n /* \"#utility.yul\":2523:2561 */\n mstore\n /* \"#utility.yul\":2584:2587 */\n 0x84\n /* \"#utility.yul\":2326:2335 */\n dup2\n /* \"#utility.yul\":2570:2588 */\n revert\n /* \"#utility.yul\":2599:2780 */\n tag_77:\n /* \"#utility.yul\":2657:2661 */\n 0x00\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":2682:2688 */\n dup3\n /* \"#utility.yul\":2679:2709 */\n gt\n /* \"#utility.yul\":2676:2732 */\n iszero\n tag_101\n jumpi\n /* \"#utility.yul\":2712:2730 */\n tag_101\n tag_72\n jump\t// in\n tag_101:\n pop\n /* \"#utility.yul\":2757:2758 */\n 0x05\n /* \"#utility.yul\":2753:2767 */\n shl\n /* \"#utility.yul\":2769:2773 */\n 0x20\n /* \"#utility.yul\":2749:2774 */\n add\n swap1\n /* \"#utility.yul\":2599:2780 */\n jump\t// out\n /* \"#utility.yul\":2785:3169 */\n tag_78:\n /* \"#utility.yul\":2907:2909 */\n 0x40\n /* \"#utility.yul\":2901:2910 */\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":2919:2951 */\n dup2\n mstore\n /* \"#utility.yul\":2982:2986 */\n 0x20\n /* \"#utility.yul\":2978:2979 */\n 0x04\n /* \"#utility.yul\":2967:2980 */\n dup3\n add\n /* \"#utility.yul\":2960:2987 */\n mstore\n /* \"#utility.yul\":3019:3021 */\n 0x2b\n /* \"#utility.yul\":3014:3016 */\n 0x24\n /* \"#utility.yul\":3003:3017 */\n dup3\n add\n /* \"#utility.yul\":2996:3022 */\n mstore\n /* \"#utility.yul\":3054:3088 */\n 0x414249206465636f64696e673a20696e76616c69642063616c6c646174612061\n /* \"#utility.yul\":3049:3051 */\n 0x44\n /* \"#utility.yul\":3038:3052 */\n dup3\n add\n /* \"#utility.yul\":3031:3089 */\n mstore\n shl(0xa8, 0x7272617920737472696465)\n /* \"#utility.yul\":3116:3119 */\n 0x64\n /* \"#utility.yul\":3105:3120 */\n dup3\n add\n /* \"#utility.yul\":3098:3136 */\n mstore\n /* \"#utility.yul\":3159:3162 */\n 0x84\n /* \"#utility.yul\":2901:2910 */\n dup2\n /* \"#utility.yul\":3145:3163 */\n revert\n /* \"#utility.yul\":3174:5804 */\n tag_79:\n /* \"#utility.yul\":3234:3239 */\n 0x00\n /* \"#utility.yul\":3264:3268 */\n 0x40\n /* \"#utility.yul\":3305:3307 */\n dup1\n /* \"#utility.yul\":3293:3302 */\n dup4\n /* \"#utility.yul\":3288:3291 */\n dup6\n /* \"#utility.yul\":3284:3303 */\n sub\n /* \"#utility.yul\":3280:3308 */\n slt\n /* \"#utility.yul\":3277:3420 */\n iszero\n tag_105\n jumpi\n /* \"#utility.yul\":3331:3410 */\n tag_105\n tag_71\n jump\t// in\n tag_105:\n /* \"#utility.yul\":3438:3460 */\n tag_106\n tag_73\n jump\t// in\n tag_106:\n /* \"#utility.yul\":3429:3460 */\n swap2\n pop\n /* \"#utility.yul\":3497:3506 */\n dup3\n /* \"#utility.yul\":3484:3507 */\n calldataload\n /* \"#utility.yul\":3551:3555 */\n 0xff\n /* \"#utility.yul\":3542:3549 */\n dup2\n /* \"#utility.yul\":3538:3556 */\n and\n /* \"#utility.yul\":3529:3536 */\n dup2\n /* \"#utility.yul\":3526:3557 */\n eq\n /* \"#utility.yul\":3516:3575 */\n tag_107\n jumpi\n /* \"#utility.yul\":3571:3572 */\n 0x00\n /* \"#utility.yul\":3568:3569 */\n dup1\n /* \"#utility.yul\":3561:3573 */\n revert\n /* \"#utility.yul\":3516:3575 */\n tag_107:\n /* \"#utility.yul\":3584:3606 */\n dup3\n mstore\n /* \"#utility.yul\":3625:3627 */\n 0x20\n /* \"#utility.yul\":3663:3681 */\n dup4\n dup2\n add\n /* \"#utility.yul\":3650:3682 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":3731:3745 */\n dup1\n dup3\n gt\n /* \"#utility.yul\":3728:3857 */\n iszero\n tag_109\n jumpi\n /* \"#utility.yul\":3768:3847 */\n tag_109\n tag_75\n jump\t// in\n tag_109:\n /* \"#utility.yul\":3891:3897 */\n dup2\n /* \"#utility.yul\":3880:3889 */\n dup7\n /* \"#utility.yul\":3876:3898 */\n add\n /* \"#utility.yul\":3866:3898 */\n swap2\n pop\n /* \"#utility.yul\":3917:3921 */\n 0x1f\n /* \"#utility.yul\":3957:3960 */\n dup8\n /* \"#utility.yul\":3952:3954 */\n dup2\n /* \"#utility.yul\":3948:3950 */\n dup5\n /* \"#utility.yul\":3944:3955 */\n add\n /* \"#utility.yul\":3940:3961 */\n slt\n /* \"#utility.yul\":3930:4074 */\n tag_111\n jumpi\n /* \"#utility.yul\":3985:4064 */\n tag_111\n tag_76\n jump\t// in\n tag_111:\n /* \"#utility.yul\":4106:4108 */\n dup3\n /* \"#utility.yul\":4093:4109 */\n calldataload\n /* \"#utility.yul\":4129:4187 */\n tag_112\n /* \"#utility.yul\":4145:4186 */\n tag_113\n /* \"#utility.yul\":4183:4185 */\n dup3\n /* \"#utility.yul\":4145:4186 */\n tag_77\n jump\t// in\n tag_113:\n /* \"#utility.yul\":4129:4187 */\n tag_74\n jump\t// in\n tag_112:\n /* \"#utility.yul\":4221:4236 */\n dup2\n dup2\n mstore\n /* \"#utility.yul\":4303:4304 */\n 0x05\n /* \"#utility.yul\":4299:4309 */\n swap2\n swap1\n swap2\n shl\n /* \"#utility.yul\":4291:4310 */\n dup5\n add\n /* \"#utility.yul\":4287:4315 */\n dup6\n add\n swap1\n /* \"#utility.yul\":4252:4264 */\n dup6\n dup2\n add\n swap1\n /* \"#utility.yul\":4327:4342 */\n dup11\n dup4\n gt\n /* \"#utility.yul\":4324:4454 */\n iszero\n tag_115\n jumpi\n /* \"#utility.yul\":4365:4444 */\n tag_115\n tag_78\n jump\t// in\n tag_115:\n /* \"#utility.yul\":4482:4484 */\n dup7\n /* \"#utility.yul\":4478:4480 */\n dup7\n /* \"#utility.yul\":4474:4485 */\n add\n /* \"#utility.yul\":4494:5760 */\n tag_116:\n /* \"#utility.yul\":4510:4516 */\n dup4\n /* \"#utility.yul\":4505:4508 */\n dup2\n /* \"#utility.yul\":4502:4517 */\n lt\n /* \"#utility.yul\":4494:5760 */\n iszero\n tag_118\n jumpi\n /* \"#utility.yul\":4596:4599 */\n dup1\n /* \"#utility.yul\":4583:4600 */\n calldataload\n /* \"#utility.yul\":4632:4634 */\n dup7\n /* \"#utility.yul\":4619:4630 */\n dup2\n /* \"#utility.yul\":4616:4635 */\n gt\n /* \"#utility.yul\":4613:4759 */\n iszero\n tag_120\n jumpi\n /* \"#utility.yul\":4666:4745 */\n tag_120\n tag_76\n jump\t// in\n tag_120:\n /* \"#utility.yul\":4782:4802 */\n dup8\n add\n /* \"#utility.yul\":4837:4839 */\n 0x3f\n /* \"#utility.yul\":4829:4840 */\n dup2\n add\n /* \"#utility.yul\":4825:4846 */\n dup14\n sgt\n /* \"#utility.yul\":4815:4971 */\n tag_122\n jumpi\n /* \"#utility.yul\":4878:4957 */\n tag_122\n tag_76\n jump\t// in\n tag_122:\n /* \"#utility.yul\":5015:5017 */\n dup9\n /* \"#utility.yul\":5011:5013 */\n dup2\n /* \"#utility.yul\":5007:5018 */\n add\n /* \"#utility.yul\":4994:5019 */\n calldataload\n /* \"#utility.yul\":5042:5044 */\n dup8\n /* \"#utility.yul\":5038:5040 */\n dup2\n /* \"#utility.yul\":5035:5045 */\n gt\n /* \"#utility.yul\":5032:5068 */\n iszero\n tag_124\n jumpi\n /* \"#utility.yul\":5048:5066 */\n tag_124\n tag_72\n jump\t// in\n tag_124:\n /* \"#utility.yul\":5094:5145 */\n tag_125\n /* \"#utility.yul\":5118:5129 */\n dup2\n dup9\n add\n not(0x1f)\n /* \"#utility.yul\":5114:5139 */\n and\n /* \"#utility.yul\":5110:5144 */\n dup12\n add\n /* \"#utility.yul\":5094:5145 */\n tag_74\n jump\t// in\n tag_125:\n /* \"#utility.yul\":5172:5174 */\n dup2\n /* \"#utility.yul\":5165:5170 */\n dup2\n /* \"#utility.yul\":5158:5175 */\n mstore\n /* \"#utility.yul\":5216:5219 */\n dup15\n /* \"#utility.yul\":5211:5213 */\n dup13\n /* \"#utility.yul\":5206:5208 */\n dup4\n /* \"#utility.yul\":5202:5204 */\n dup6\n /* \"#utility.yul\":5198:5209 */\n add\n /* \"#utility.yul\":5194:5214 */\n add\n /* \"#utility.yul\":5191:5220 */\n gt\n /* \"#utility.yul\":5188:5582 */\n iszero\n tag_126\n jumpi\n /* \"#utility.yul\":5264:5273 */\n dup12\n mload\n shl(0xe5, 0x461bcd)\n /* \"#utility.yul\":5290:5322 */\n dup2\n mstore\n /* \"#utility.yul\":5357:5358 */\n 0x04\n /* \"#utility.yul\":5346:5359 */\n dup2\n add\n /* \"#utility.yul\":5339:5364 */\n dup13\n swap1\n mstore\n /* \"#utility.yul\":5404:5406 */\n 0x27\n /* \"#utility.yul\":5399:5401 */\n 0x24\n /* \"#utility.yul\":5388:5402 */\n dup3\n add\n /* \"#utility.yul\":5381:5407 */\n mstore\n /* \"#utility.yul\":5447:5481 */\n 0x414249206465636f64696e673a20696e76616c69642062797465206172726179\n /* \"#utility.yul\":5442:5444 */\n 0x44\n /* \"#utility.yul\":5431:5445 */\n dup3\n add\n /* \"#utility.yul\":5424:5482 */\n mstore\n shl(0xcb, 0x040d8cadccee8d)\n /* \"#utility.yul\":5517:5520 */\n 0x64\n /* \"#utility.yul\":5506:5521 */\n dup3\n add\n /* \"#utility.yul\":5499:5533 */\n mstore\n /* \"#utility.yul\":5564:5567 */\n 0x84\n /* \"#utility.yul\":5264:5273 */\n dup2\n /* \"#utility.yul\":5550:5568 */\n revert\n /* \"#utility.yul\":5188:5582 */\n tag_126:\n /* \"#utility.yul\":5637:5639 */\n dup2\n /* \"#utility.yul\":5632:5634 */\n dup13\n /* \"#utility.yul\":5628:5630 */\n dup5\n /* \"#utility.yul\":5624:5635 */\n add\n /* \"#utility.yul\":5619:5621 */\n dup13\n /* \"#utility.yul\":5612:5617 */\n dup4\n /* \"#utility.yul\":5608:5622 */\n add\n /* \"#utility.yul\":5595:5640 */\n calldatacopy\n /* \"#utility.yul\":5685:5686 */\n 0x00\n /* \"#utility.yul\":5664:5678 */\n swap2\n dup2\n add\n /* \"#utility.yul\":5660:5683 */\n dup12\n add\n /* \"#utility.yul\":5653:5687 */\n swap2\n swap1\n swap2\n mstore\n /* \"#utility.yul\":5700:5718 */\n dup5\n mstore\n pop\n /* \"#utility.yul\":5738:5750 */\n swap2\n dup8\n add\n swap2\n /* \"#utility.yul\":4527:4539 */\n dup8\n add\n /* \"#utility.yul\":4494:5760 */\n jump(tag_116)\n tag_118:\n /* \"#utility.yul\":4498:4501 */\n pop\n /* \"#utility.yul\":5792:5797 */\n dup1\n /* \"#utility.yul\":5787:5789 */\n dup8\n /* \"#utility.yul\":5780:5785 */\n dup11\n /* \"#utility.yul\":5776:5790 */\n add\n /* \"#utility.yul\":5769:5798 */\n mstore\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":3174:5804 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5809:5980 */\n tag_80:\n /* \"#utility.yul\":5876:5896 */\n dup1\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":5925:5955 */\n dup2\n and\n /* \"#utility.yul\":5915:5956 */\n dup2\n eq\n /* \"#utility.yul\":5905:5974 */\n tag_128\n jumpi\n /* \"#utility.yul\":5970:5971 */\n 0x00\n /* \"#utility.yul\":5967:5968 */\n dup1\n /* \"#utility.yul\":5960:5972 */\n revert\n /* \"#utility.yul\":5905:5974 */\n tag_128:\n /* \"#utility.yul\":5809:5980 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5985:7091 */\n tag_11:\n /* \"#utility.yul\":6139:6145 */\n 0x00\n /* \"#utility.yul\":6147:6153 */\n dup1\n /* \"#utility.yul\":6155:6161 */\n 0x00\n /* \"#utility.yul\":6163:6169 */\n dup1\n /* \"#utility.yul\":6171:6177 */\n 0x00\n /* \"#utility.yul\":6224:6227 */\n 0xa0\n /* \"#utility.yul\":6212:6221 */\n dup7\n /* \"#utility.yul\":6203:6210 */\n dup9\n /* \"#utility.yul\":6199:6222 */\n sub\n /* \"#utility.yul\":6195:6228 */\n slt\n /* \"#utility.yul\":6192:6340 */\n iszero\n tag_131\n jumpi\n /* \"#utility.yul\":6251:6330 */\n tag_131\n tag_69\n jump\t// in\n tag_131:\n /* \"#utility.yul\":6376:6385 */\n dup6\n /* \"#utility.yul\":6363:6386 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":6446:6448 */\n dup1\n /* \"#utility.yul\":6438:6444 */\n dup3\n /* \"#utility.yul\":6435:6449 */\n gt\n /* \"#utility.yul\":6432:6561 */\n iszero\n tag_133\n jumpi\n /* \"#utility.yul\":6472:6551 */\n tag_133\n tag_70\n jump\t// in\n tag_133:\n /* \"#utility.yul\":6580:6644 */\n tag_134\n /* \"#utility.yul\":6636:6643 */\n dup10\n /* \"#utility.yul\":6627:6633 */\n dup4\n /* \"#utility.yul\":6616:6625 */\n dup11\n /* \"#utility.yul\":6612:6634 */\n add\n /* \"#utility.yul\":6580:6644 */\n tag_79\n jump\t// in\n tag_134:\n /* \"#utility.yul\":6570:6644 */\n swap7\n pop\n /* \"#utility.yul\":6691:6693 */\n 0x20\n /* \"#utility.yul\":6680:6689 */\n dup9\n /* \"#utility.yul\":6676:6694 */\n add\n /* \"#utility.yul\":6663:6695 */\n calldataload\n /* \"#utility.yul\":6653:6695 */\n swap6\n pop\n /* \"#utility.yul\":6742:6744 */\n 0x40\n /* \"#utility.yul\":6731:6740 */\n dup9\n /* \"#utility.yul\":6727:6745 */\n add\n /* \"#utility.yul\":6714:6746 */\n calldataload\n /* \"#utility.yul\":6704:6746 */\n swap5\n pop\n /* \"#utility.yul\":6799:6801 */\n 0x60\n /* \"#utility.yul\":6788:6797 */\n dup9\n /* \"#utility.yul\":6784:6802 */\n add\n /* \"#utility.yul\":6771:6803 */\n calldataload\n /* \"#utility.yul\":6755:6803 */\n swap2\n pop\n /* \"#utility.yul\":6828:6830 */\n dup1\n /* \"#utility.yul\":6818:6826 */\n dup3\n /* \"#utility.yul\":6815:6831 */\n gt\n /* \"#utility.yul\":6812:6943 */\n iszero\n tag_136\n jumpi\n /* \"#utility.yul\":6854:6933 */\n tag_136\n tag_70\n jump\t// in\n tag_136:\n /* \"#utility.yul\":6812:6943 */\n pop\n /* \"#utility.yul\":6962:7028 */\n tag_137\n /* \"#utility.yul\":7020:7027 */\n dup9\n /* \"#utility.yul\":7009:7017 */\n dup3\n /* \"#utility.yul\":6998:7007 */\n dup10\n /* \"#utility.yul\":6994:7018 */\n add\n /* \"#utility.yul\":6962:7028 */\n tag_79\n jump\t// in\n tag_137:\n /* \"#utility.yul\":6952:7028 */\n swap3\n pop\n pop\n /* \"#utility.yul\":7047:7085 */\n tag_138\n /* \"#utility.yul\":7080:7083 */\n 0x80\n /* \"#utility.yul\":7069:7078 */\n dup8\n /* \"#utility.yul\":7065:7084 */\n add\n /* \"#utility.yul\":7047:7085 */\n tag_80\n jump\t// in\n tag_138:\n /* \"#utility.yul\":7037:7085 */\n swap1\n pop\n /* \"#utility.yul\":5985:7091 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":7096:7269 */\n tag_81:\n /* \"#utility.yul\":7164:7184 */\n dup1\n calldataload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":7213:7244 */\n dup2\n and\n /* \"#utility.yul\":7203:7245 */\n dup2\n eq\n /* \"#utility.yul\":7193:7263 */\n tag_128\n jumpi\n /* \"#utility.yul\":7259:7260 */\n 0x00\n /* \"#utility.yul\":7256:7257 */\n dup1\n /* \"#utility.yul\":7249:7261 */\n revert\n /* \"#utility.yul\":7274:8104 */\n tag_15:\n /* \"#utility.yul\":7398:7404 */\n 0x00\n /* \"#utility.yul\":7406:7412 */\n dup1\n /* \"#utility.yul\":7414:7420 */\n 0x00\n /* \"#utility.yul\":7422:7428 */\n dup1\n /* \"#utility.yul\":7430:7436 */\n 0x00\n /* \"#utility.yul\":7483:7486 */\n 0xa0\n /* \"#utility.yul\":7471:7480 */\n dup7\n /* \"#utility.yul\":7462:7469 */\n dup9\n /* \"#utility.yul\":7458:7481 */\n sub\n /* \"#utility.yul\":7454:7487 */\n slt\n /* \"#utility.yul\":7451:7599 */\n iszero\n tag_143\n jumpi\n /* \"#utility.yul\":7510:7589 */\n tag_143\n tag_69\n jump\t// in\n tag_143:\n /* \"#utility.yul\":7618:7647 */\n tag_144\n /* \"#utility.yul\":7637:7646 */\n dup7\n /* \"#utility.yul\":7618:7647 */\n tag_81\n jump\t// in\n tag_144:\n /* \"#utility.yul\":7608:7647 */\n swap5\n pop\n /* \"#utility.yul\":7694:7696 */\n 0x20\n /* \"#utility.yul\":7683:7692 */\n dup7\n /* \"#utility.yul\":7679:7697 */\n add\n /* \"#utility.yul\":7666:7698 */\n calldataload\n /* \"#utility.yul\":7656:7698 */\n swap4\n pop\n /* \"#utility.yul\":7745:7747 */\n 0x40\n /* \"#utility.yul\":7734:7743 */\n dup7\n /* \"#utility.yul\":7730:7748 */\n add\n /* \"#utility.yul\":7717:7749 */\n calldataload\n /* \"#utility.yul\":7707:7749 */\n swap3\n pop\n /* \"#utility.yul\":7800:7802 */\n 0x60\n /* \"#utility.yul\":7789:7798 */\n dup7\n /* \"#utility.yul\":7785:7803 */\n add\n /* \"#utility.yul\":7772:7804 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":7819:7825 */\n dup2\n /* \"#utility.yul\":7816:7846 */\n gt\n /* \"#utility.yul\":7813:7958 */\n iszero\n tag_146\n jumpi\n /* \"#utility.yul\":7869:7948 */\n tag_146\n tag_70\n jump\t// in\n tag_146:\n /* \"#utility.yul\":7977:8041 */\n tag_137\n /* \"#utility.yul\":8033:8040 */\n dup9\n /* \"#utility.yul\":8024:8030 */\n dup3\n /* \"#utility.yul\":8013:8022 */\n dup10\n /* \"#utility.yul\":8009:8031 */\n add\n /* \"#utility.yul\":7977:8041 */\n tag_79\n jump\t// in\n /* \"#utility.yul\":8109:8272 */\n tag_82:\n /* \"#utility.yul\":8176:8196 */\n dup1\n calldataload\n /* \"#utility.yul\":8236:8246 */\n 0xffffffff\n /* \"#utility.yul\":8225:8247 */\n dup2\n and\n /* \"#utility.yul\":8215:8248 */\n dup2\n eq\n /* \"#utility.yul\":8205:8266 */\n tag_128\n jumpi\n /* \"#utility.yul\":8262:8263 */\n 0x00\n /* \"#utility.yul\":8259:8260 */\n dup1\n /* \"#utility.yul\":8252:8264 */\n revert\n /* \"#utility.yul\":8277:10857 */\n tag_19:\n /* \"#utility.yul\":8443:8449 */\n 0x00\n /* \"#utility.yul\":8451:8457 */\n dup1\n /* \"#utility.yul\":8459:8465 */\n 0x00\n /* \"#utility.yul\":8467:8473 */\n dup1\n /* \"#utility.yul\":8520:8523 */\n 0x80\n /* \"#utility.yul\":8508:8517 */\n dup6\n /* \"#utility.yul\":8499:8506 */\n dup8\n /* \"#utility.yul\":8495:8518 */\n sub\n /* \"#utility.yul\":8491:8524 */\n slt\n /* \"#utility.yul\":8488:8636 */\n iszero\n tag_153\n jumpi\n /* \"#utility.yul\":8547:8626 */\n tag_153\n tag_69\n jump\t// in\n tag_153:\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":8713:8715 */\n dup1\n /* \"#utility.yul\":8701:8710 */\n dup7\n /* \"#utility.yul\":8688:8711 */\n calldataload\n /* \"#utility.yul\":8685:8716 */\n gt\n /* \"#utility.yul\":8682:8828 */\n iszero\n tag_155\n jumpi\n /* \"#utility.yul\":8739:8818 */\n tag_155\n tag_70\n jump\t// in\n tag_155:\n /* \"#utility.yul\":8875:8884 */\n dup6\n /* \"#utility.yul\":8862:8885 */\n calldataload\n /* \"#utility.yul\":8851:8860 */\n dup7\n /* \"#utility.yul\":8847:8886 */\n add\n /* \"#utility.yul\":8924:8931 */\n dup8\n /* \"#utility.yul\":8917:8921 */\n 0x1f\n /* \"#utility.yul\":8913:8915 */\n dup3\n /* \"#utility.yul\":8909:8922 */\n add\n /* \"#utility.yul\":8905:8932 */\n slt\n /* \"#utility.yul\":8895:9045 */\n tag_157\n jumpi\n /* \"#utility.yul\":8956:9035 */\n tag_157\n tag_76\n jump\t// in\n tag_157:\n /* \"#utility.yul\":9065:9137 */\n tag_158\n /* \"#utility.yul\":9081:9136 */\n tag_113\n /* \"#utility.yul\":9132:9134 */\n dup3\n /* \"#utility.yul\":9119:9135 */\n calldataload\n /* \"#utility.yul\":9081:9136 */\n tag_77\n jump\t// in\n /* \"#utility.yul\":9065:9137 */\n tag_158:\n /* \"#utility.yul\":9183:9199 */\n dup2\n calldataload\n /* \"#utility.yul\":9171:9200 */\n dup1\n dup3\n mstore\n /* \"#utility.yul\":9225:9229 */\n 0x20\n /* \"#utility.yul\":9216:9230 */\n dup1\n dup4\n add\n swap3\n /* \"#utility.yul\":9159:9162 */\n swap2\n /* \"#utility.yul\":9269:9270 */\n 0x05\n /* \"#utility.yul\":9265:9289 */\n shl\n /* \"#utility.yul\":9257:9290 */\n dup5\n add\n /* \"#utility.yul\":9253:9297 */\n add\n /* \"#utility.yul\":9309:9328 */\n dup11\n dup2\n gt\n /* \"#utility.yul\":9306:9440 */\n iszero\n tag_161\n jumpi\n /* \"#utility.yul\":9351:9430 */\n tag_161\n tag_78\n jump\t// in\n tag_161:\n /* \"#utility.yul\":9468:9472 */\n 0x20\n /* \"#utility.yul\":9464:9466 */\n dup5\n /* \"#utility.yul\":9460:9473 */\n add\n /* \"#utility.yul\":9482:10429 */\n tag_162:\n /* \"#utility.yul\":9498:9504 */\n dup2\n /* \"#utility.yul\":9493:9496 */\n dup2\n /* \"#utility.yul\":9490:9505 */\n lt\n /* \"#utility.yul\":9482:10429 */\n iszero\n tag_164\n jumpi\n /* \"#utility.yul\":9579:9581 */\n dup6\n /* \"#utility.yul\":9573:9576 */\n dup2\n /* \"#utility.yul\":9560:9577 */\n calldataload\n /* \"#utility.yul\":9557:9582 */\n gt\n /* \"#utility.yul\":9554:9706 */\n iszero\n tag_166\n jumpi\n /* \"#utility.yul\":9613:9692 */\n tag_166\n tag_76\n jump\t// in\n tag_166:\n /* \"#utility.yul\":9737:9754 */\n dup1\n calldataload\n /* \"#utility.yul\":9729:9755 */\n dup6\n add\n /* \"#utility.yul\":9807:9811 */\n 0x40\n /* \"#utility.yul\":9779:9795 */\n dup2\n dup15\n sub\n not(0x1f)\n /* \"#utility.yul\":9775:9805 */\n add\n /* \"#utility.yul\":9771:9812 */\n slt\n /* \"#utility.yul\":9768:9936 */\n iszero\n tag_168\n jumpi\n /* \"#utility.yul\":9843:9922 */\n tag_168\n tag_71\n jump\t// in\n tag_168:\n /* \"#utility.yul\":9962:9984 */\n tag_169\n tag_73\n jump\t// in\n tag_169:\n /* \"#utility.yul\":10032:10036 */\n 0x20\n /* \"#utility.yul\":10028:10030 */\n dup3\n /* \"#utility.yul\":10024:10037 */\n add\n /* \"#utility.yul\":10011:10038 */\n calldataload\n /* \"#utility.yul\":10065:10067 */\n dup9\n /* \"#utility.yul\":10057:10063 */\n dup2\n /* \"#utility.yul\":10054:10068 */\n gt\n /* \"#utility.yul\":10051:10192 */\n iszero\n tag_171\n jumpi\n /* \"#utility.yul\":10099:10178 */\n tag_171\n tag_75\n jump\t// in\n tag_171:\n /* \"#utility.yul\":10219:10287 */\n tag_172\n /* \"#utility.yul\":10279:10286 */\n dup16\n /* \"#utility.yul\":10272:10276 */\n 0x20\n /* \"#utility.yul\":10263:10269 */\n dup4\n /* \"#utility.yul\":10259:10261 */\n dup7\n /* \"#utility.yul\":10255:10270 */\n add\n /* \"#utility.yul\":10251:10277 */\n add\n /* \"#utility.yul\":10219:10287 */\n tag_79\n jump\t// in\n tag_172:\n /* \"#utility.yul\":10205:10288 */\n dup3\n mstore\n pop\n /* \"#utility.yul\":10347:10351 */\n 0x40\n /* \"#utility.yul\":10339:10352 */\n swap2\n swap1\n swap2\n add\n /* \"#utility.yul\":10326:10353 */\n calldataload\n /* \"#utility.yul\":10319:10323 */\n 0x20\n /* \"#utility.yul\":10308:10324 */\n dup1\n dup4\n add\n /* \"#utility.yul\":10301:10354 */\n swap2\n swap1\n swap2\n mstore\n /* \"#utility.yul\":10367:10385 */\n swap1\n dup6\n mstore\n /* \"#utility.yul\":10405:10419 */\n swap4\n dup5\n add\n swap4\n /* \"#utility.yul\":9515:9529 */\n add\n /* \"#utility.yul\":9482:10429 */\n jump(tag_162)\n tag_164:\n /* \"#utility.yul\":9486:9489 */\n pop\n pop\n /* \"#utility.yul\":10448:10453 */\n dup1\n /* \"#utility.yul\":10438:10453 */\n swap8\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":10472:10511 */\n tag_173\n /* \"#utility.yul\":10505:10509 */\n 0x20\n /* \"#utility.yul\":10494:10503 */\n dup8\n /* \"#utility.yul\":10490:10510 */\n add\n /* \"#utility.yul\":10472:10511 */\n tag_82\n jump\t// in\n tag_173:\n /* \"#utility.yul\":10462:10511 */\n swap4\n pop\n /* \"#utility.yul\":10564:10568 */\n 0x40\n /* \"#utility.yul\":10553:10562 */\n dup7\n /* \"#utility.yul\":10549:10569 */\n add\n /* \"#utility.yul\":10536:10570 */\n calldataload\n /* \"#utility.yul\":10595:10597 */\n dup2\n /* \"#utility.yul\":10585:10593 */\n dup2\n /* \"#utility.yul\":10582:10598 */\n gt\n /* \"#utility.yul\":10579:10710 */\n iszero\n tag_175\n jumpi\n /* \"#utility.yul\":10621:10700 */\n tag_175\n tag_70\n jump\t// in\n tag_175:\n /* \"#utility.yul\":10729:10795 */\n tag_176\n /* \"#utility.yul\":10787:10794 */\n dup9\n /* \"#utility.yul\":10776:10784 */\n dup3\n /* \"#utility.yul\":10765:10774 */\n dup10\n /* \"#utility.yul\":10761:10785 */\n add\n /* \"#utility.yul\":10729:10795 */\n tag_79\n jump\t// in\n tag_176:\n /* \"#utility.yul\":10719:10795 */\n swap4\n pop\n pop\n pop\n /* \"#utility.yul\":10814:10851 */\n tag_177\n /* \"#utility.yul\":10847:10849 */\n 0x60\n /* \"#utility.yul\":10836:10845 */\n dup7\n /* \"#utility.yul\":10832:10850 */\n add\n /* \"#utility.yul\":10814:10851 */\n tag_80\n jump\t// in\n tag_177:\n /* \"#utility.yul\":10804:10851 */\n swap1\n pop\n /* \"#utility.yul\":8277:10857 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":10862:12975 */\n tag_23:\n /* \"#utility.yul\":11026:11032 */\n 0x00\n /* \"#utility.yul\":11034:11040 */\n dup1\n /* \"#utility.yul\":11042:11048 */\n 0x00\n /* \"#utility.yul\":11050:11056 */\n dup1\n /* \"#utility.yul\":11103:11106 */\n 0x80\n /* \"#utility.yul\":11091:11100 */\n dup6\n /* \"#utility.yul\":11082:11089 */\n dup8\n /* \"#utility.yul\":11078:11101 */\n sub\n /* \"#utility.yul\":11074:11107 */\n slt\n /* \"#utility.yul\":11071:11219 */\n iszero\n tag_180\n jumpi\n /* \"#utility.yul\":11130:11209 */\n tag_180\n tag_69\n jump\t// in\n tag_180:\n /* \"#utility.yul\":11255:11264 */\n dup5\n /* \"#utility.yul\":11242:11265 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":11325:11327 */\n dup1\n /* \"#utility.yul\":11317:11323 */\n dup3\n /* \"#utility.yul\":11314:11328 */\n gt\n /* \"#utility.yul\":11311:11440 */\n iszero\n tag_182\n jumpi\n /* \"#utility.yul\":11351:11430 */\n tag_182\n tag_70\n jump\t// in\n tag_182:\n /* \"#utility.yul\":11474:11480 */\n dup2\n /* \"#utility.yul\":11463:11472 */\n dup8\n /* \"#utility.yul\":11459:11481 */\n add\n /* \"#utility.yul\":11449:11481 */\n swap2\n pop\n /* \"#utility.yul\":11519:11526 */\n dup8\n /* \"#utility.yul\":11512:11516 */\n 0x1f\n /* \"#utility.yul\":11508:11510 */\n dup4\n /* \"#utility.yul\":11504:11517 */\n add\n /* \"#utility.yul\":11500:11527 */\n slt\n /* \"#utility.yul\":11490:11640 */\n tag_184\n jumpi\n /* \"#utility.yul\":11551:11630 */\n tag_184\n tag_76\n jump\t// in\n tag_184:\n /* \"#utility.yul\":11672:11674 */\n dup2\n /* \"#utility.yul\":11659:11675 */\n calldataload\n /* \"#utility.yul\":11694:11698 */\n 0x20\n /* \"#utility.yul\":11718:11776 */\n tag_185\n /* \"#utility.yul\":11734:11775 */\n tag_113\n /* \"#utility.yul\":11772:11774 */\n dup4\n /* \"#utility.yul\":11734:11775 */\n tag_77\n jump\t// in\n /* \"#utility.yul\":11718:11776 */\n tag_185:\n /* \"#utility.yul\":11810:11825 */\n dup3\n dup2\n mstore\n /* \"#utility.yul\":11892:11893 */\n 0x06\n /* \"#utility.yul\":11888:11898 */\n swap3\n swap1\n swap3\n shl\n /* \"#utility.yul\":11880:11899 */\n dup5\n add\n /* \"#utility.yul\":11876:11904 */\n dup2\n add\n swap2\n /* \"#utility.yul\":11841:11853 */\n dup2\n dup2\n add\n swap1\n /* \"#utility.yul\":11916:11935 */\n dup12\n dup5\n gt\n /* \"#utility.yul\":11913:12047 */\n iszero\n tag_188\n jumpi\n /* \"#utility.yul\":11958:12037 */\n tag_188\n tag_78\n jump\t// in\n tag_188:\n /* \"#utility.yul\":12067:12078 */\n swap5\n dup3\n add\n swap5\n /* \"#utility.yul\":12087:12549 */\n tag_189:\n /* \"#utility.yul\":12103:12109 */\n dup4\n /* \"#utility.yul\":12098:12101 */\n dup7\n /* \"#utility.yul\":12095:12110 */\n lt\n /* \"#utility.yul\":12087:12549 */\n iszero\n tag_191\n jumpi\n /* \"#utility.yul\":12185:12189 */\n 0x40\n /* \"#utility.yul\":12179:12182 */\n dup7\n /* \"#utility.yul\":12170:12177 */\n dup14\n /* \"#utility.yul\":12166:12183 */\n sub\n /* \"#utility.yul\":12162:12190 */\n slt\n /* \"#utility.yul\":12159:12314 */\n iszero\n tag_193\n jumpi\n /* \"#utility.yul\":12221:12300 */\n tag_193\n tag_71\n jump\t// in\n tag_193:\n /* \"#utility.yul\":12340:12362 */\n tag_194\n tag_73\n jump\t// in\n tag_194:\n /* \"#utility.yul\":12389:12412 */\n tag_195\n /* \"#utility.yul\":12408:12411 */\n dup8\n /* \"#utility.yul\":12389:12412 */\n tag_81\n jump\t// in\n tag_195:\n /* \"#utility.yul\":12375:12413 */\n dup2\n mstore\n /* \"#utility.yul\":12462:12474 */\n dup7\n dup5\n add\n /* \"#utility.yul\":12449:12475 */\n calldataload\n /* \"#utility.yul\":12433:12447 */\n dup5\n dup3\n add\n /* \"#utility.yul\":12426:12476 */\n mstore\n /* \"#utility.yul\":12489:12507 */\n dup3\n mstore\n /* \"#utility.yul\":12129:12133 */\n 0x40\n /* \"#utility.yul\":12120:12134 */\n swap1\n swap6\n add\n swap5\n /* \"#utility.yul\":12527:12539 */\n swap1\n dup3\n add\n swap1\n /* \"#utility.yul\":12087:12549 */\n jump(tag_189)\n tag_191:\n /* \"#utility.yul\":12568:12573 */\n swap9\n pop\n /* \"#utility.yul\":12592:12629 */\n tag_196\n swap1\n pop\n /* \"#utility.yul\":12610:12628 */\n dup10\n dup3\n add\n /* \"#utility.yul\":12592:12629 */\n tag_82\n jump\t// in\n tag_196:\n /* \"#utility.yul\":12582:12629 */\n swap7\n pop\n pop\n pop\n /* \"#utility.yul\":12682:12686 */\n 0x40\n /* \"#utility.yul\":12671:12680 */\n dup8\n /* \"#utility.yul\":12667:12687 */\n add\n /* \"#utility.yul\":12654:12688 */\n calldataload\n /* \"#utility.yul\":12638:12688 */\n swap2\n pop\n /* \"#utility.yul\":12713:12715 */\n dup1\n /* \"#utility.yul\":12703:12711 */\n dup3\n /* \"#utility.yul\":12700:12716 */\n gt\n /* \"#utility.yul\":12697:12828 */\n iszero\n tag_198\n jumpi\n /* \"#utility.yul\":12739:12818 */\n tag_198\n tag_70\n jump\t// in\n tag_198:\n /* \"#utility.yul\":12697:12828 */\n pop\n /* \"#utility.yul\":12847:12913 */\n tag_199\n /* \"#utility.yul\":12905:12912 */\n dup8\n /* \"#utility.yul\":12894:12902 */\n dup3\n /* \"#utility.yul\":12883:12892 */\n dup9\n /* \"#utility.yul\":12879:12903 */\n add\n /* \"#utility.yul\":12847:12913 */\n tag_79\n jump\t// in\n tag_199:\n /* \"#utility.yul\":12837:12913 */\n swap3\n pop\n pop\n /* \"#utility.yul\":12932:12969 */\n tag_177\n /* \"#utility.yul\":12965:12967 */\n 0x60\n /* \"#utility.yul\":12954:12963 */\n dup7\n /* \"#utility.yul\":12950:12968 */\n add\n /* \"#utility.yul\":12932:12969 */\n tag_80\n jump\t// in\n /* \"#utility.yul\":12980:14017 */\n tag_27:\n /* \"#utility.yul\":13125:13131 */\n 0x00\n /* \"#utility.yul\":13133:13139 */\n dup1\n /* \"#utility.yul\":13141:13147 */\n 0x00\n /* \"#utility.yul\":13149:13155 */\n dup1\n /* \"#utility.yul\":13202:13205 */\n 0x80\n /* \"#utility.yul\":13190:13199 */\n dup6\n /* \"#utility.yul\":13181:13188 */\n dup8\n /* \"#utility.yul\":13177:13200 */\n sub\n /* \"#utility.yul\":13173:13206 */\n slt\n /* \"#utility.yul\":13170:13318 */\n iszero\n tag_203\n jumpi\n /* \"#utility.yul\":13229:13308 */\n tag_203\n tag_69\n jump\t// in\n tag_203:\n /* \"#utility.yul\":13354:13363 */\n dup5\n /* \"#utility.yul\":13341:13364 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":13424:13426 */\n dup1\n /* \"#utility.yul\":13416:13422 */\n dup3\n /* \"#utility.yul\":13413:13427 */\n gt\n /* \"#utility.yul\":13410:13539 */\n iszero\n tag_205\n jumpi\n /* \"#utility.yul\":13450:13529 */\n tag_205\n tag_70\n jump\t// in\n tag_205:\n /* \"#utility.yul\":13558:13622 */\n tag_206\n /* \"#utility.yul\":13614:13621 */\n dup9\n /* \"#utility.yul\":13605:13611 */\n dup4\n /* \"#utility.yul\":13594:13603 */\n dup10\n /* \"#utility.yul\":13590:13612 */\n add\n /* \"#utility.yul\":13558:13622 */\n tag_79\n jump\t// in\n tag_206:\n /* \"#utility.yul\":13548:13622 */\n swap6\n pop\n /* \"#utility.yul\":13669:13671 */\n 0x20\n /* \"#utility.yul\":13658:13667 */\n dup8\n /* \"#utility.yul\":13654:13672 */\n add\n /* \"#utility.yul\":13641:13673 */\n calldataload\n /* \"#utility.yul\":13631:13673 */\n swap5\n pop\n /* \"#utility.yul\":13726:13728 */\n 0x40\n /* \"#utility.yul\":13715:13724 */\n dup8\n /* \"#utility.yul\":13711:13729 */\n add\n /* \"#utility.yul\":13698:13730 */\n calldataload\n /* \"#utility.yul\":13682:13730 */\n swap2\n pop\n /* \"#utility.yul\":13755:13757 */\n dup1\n /* \"#utility.yul\":13745:13753 */\n dup3\n /* \"#utility.yul\":13742:13758 */\n gt\n /* \"#utility.yul\":13739:13870 */\n iszero\n tag_198\n jumpi\n /* \"#utility.yul\":13781:13860 */\n tag_198\n tag_70\n jump\t// in\n /* \"#utility.yul\":14022:14783 */\n tag_31:\n /* \"#utility.yul\":14137:14143 */\n 0x00\n /* \"#utility.yul\":14145:14151 */\n dup1\n /* \"#utility.yul\":14153:14159 */\n 0x00\n /* \"#utility.yul\":14161:14167 */\n dup1\n /* \"#utility.yul\":14214:14217 */\n 0x80\n /* \"#utility.yul\":14202:14211 */\n dup6\n /* \"#utility.yul\":14193:14200 */\n dup8\n /* \"#utility.yul\":14189:14212 */\n sub\n /* \"#utility.yul\":14185:14218 */\n slt\n /* \"#utility.yul\":14182:14330 */\n iszero\n tag_213\n jumpi\n /* \"#utility.yul\":14241:14320 */\n tag_213\n tag_69\n jump\t// in\n tag_213:\n /* \"#utility.yul\":14349:14378 */\n tag_214\n /* \"#utility.yul\":14368:14377 */\n dup6\n /* \"#utility.yul\":14349:14378 */\n tag_81\n jump\t// in\n tag_214:\n /* \"#utility.yul\":14339:14378 */\n swap4\n pop\n /* \"#utility.yul\":14425:14427 */\n 0x20\n /* \"#utility.yul\":14414:14423 */\n dup6\n /* \"#utility.yul\":14410:14428 */\n add\n /* \"#utility.yul\":14397:14429 */\n calldataload\n /* \"#utility.yul\":14387:14429 */\n swap3\n pop\n /* \"#utility.yul\":14480:14482 */\n 0x40\n /* \"#utility.yul\":14469:14478 */\n dup6\n /* \"#utility.yul\":14465:14483 */\n add\n /* \"#utility.yul\":14452:14484 */\n calldataload\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":14499:14505 */\n dup2\n /* \"#utility.yul\":14496:14526 */\n gt\n /* \"#utility.yul\":14493:14638 */\n iszero\n tag_216\n jumpi\n /* \"#utility.yul\":14549:14628 */\n tag_216\n tag_70\n jump\t// in\n tag_216:\n /* \"#utility.yul\":14657:14721 */\n tag_199\n /* \"#utility.yul\":14713:14720 */\n dup8\n /* \"#utility.yul\":14704:14710 */\n dup3\n /* \"#utility.yul\":14693:14702 */\n dup9\n /* \"#utility.yul\":14689:14711 */\n add\n /* \"#utility.yul\":14657:14721 */\n tag_79\n jump\t// in\n /* \"#utility.yul\":14788:15979 */\n tag_83:\n /* \"#utility.yul\":14844:14847 */\n 0x00\n /* \"#utility.yul\":14883:14887 */\n 0x40\n /* \"#utility.yul\":14878:14881 */\n dup4\n /* \"#utility.yul\":14874:14888 */\n add\n /* \"#utility.yul\":14927:14931 */\n 0xff\n /* \"#utility.yul\":14919:14924 */\n dup4\n /* \"#utility.yul\":14913:14925 */\n mload\n /* \"#utility.yul\":14909:14932 */\n and\n /* \"#utility.yul\":14904:14907 */\n dup5\n /* \"#utility.yul\":14897:14933 */\n mstore\n /* \"#utility.yul\":14952:14956 */\n 0x20\n /* \"#utility.yul\":15002:15004 */\n dup1\n /* \"#utility.yul\":14995:15000 */\n dup5\n /* \"#utility.yul\":14991:15005 */\n add\n /* \"#utility.yul\":14985:15006 */\n mload\n /* \"#utility.yul\":15036:15040 */\n 0x40\n /* \"#utility.yul\":15031:15033 */\n dup3\n /* \"#utility.yul\":15026:15029 */\n dup8\n /* \"#utility.yul\":15022:15034 */\n add\n /* \"#utility.yul\":15015:15041 */\n mstore\n /* \"#utility.yul\":15063:15067 */\n dup3\n /* \"#utility.yul\":15096:15108 */\n dup2\n /* \"#utility.yul\":15090:15109 */\n mload\n /* \"#utility.yul\":15131:15137 */\n dup1\n /* \"#utility.yul\":15125:15129 */\n dup6\n /* \"#utility.yul\":15118:15138 */\n mstore\n /* \"#utility.yul\":15165:15167 */\n 0x60\n /* \"#utility.yul\":15160:15163 */\n dup9\n /* \"#utility.yul\":15156:15168 */\n add\n /* \"#utility.yul\":15147:15168 */\n swap2\n pop\n /* \"#utility.yul\":15221:15223 */\n 0x60\n /* \"#utility.yul\":15211:15217 */\n dup2\n /* \"#utility.yul\":15208:15209 */\n 0x05\n /* \"#utility.yul\":15204:15218 */\n shl\n /* \"#utility.yul\":15199:15202 */\n dup10\n /* \"#utility.yul\":15195:15219 */\n add\n /* \"#utility.yul\":15191:15224 */\n add\n /* \"#utility.yul\":15177:15224 */\n swap5\n pop\n /* \"#utility.yul\":15265:15267 */\n dup4\n /* \"#utility.yul\":15251:15263 */\n dup4\n /* \"#utility.yul\":15247:15268 */\n add\n /* \"#utility.yul\":15233:15268 */\n swap3\n pop\n /* \"#utility.yul\":15286:15287 */\n 0x00\n /* \"#utility.yul\":15307:15308 */\n dup1\n /* \"#utility.yul\":15317:15951 */\n tag_220:\n /* \"#utility.yul\":15333:15339 */\n dup3\n /* \"#utility.yul\":15328:15331 */\n dup2\n /* \"#utility.yul\":15325:15340 */\n lt\n /* \"#utility.yul\":15317:15951 */\n iszero\n tag_222\n jumpi\n /* \"#utility.yul\":15404:15420 */\n dup10\n dup8\n sub\n not(0x5f)\n /* \"#utility.yul\":15400:15430 */\n add\n /* \"#utility.yul\":15386:15431 */\n dup5\n mstore\n /* \"#utility.yul\":15454:15467 */\n dup5\n mload\n /* \"#utility.yul\":15496:15505 */\n dup1\n mload\n /* \"#utility.yul\":15518:15542 */\n dup1\n dup10\n mstore\n /* \"#utility.yul\":15566:15567 */\n dup4\n /* \"#utility.yul\":15580:15737 */\n tag_223:\n /* \"#utility.yul\":15596:15604 */\n dup2\n /* \"#utility.yul\":15591:15594 */\n dup2\n /* \"#utility.yul\":15588:15605 */\n lt\n /* \"#utility.yul\":15580:15737 */\n iszero\n tag_225\n jumpi\n /* \"#utility.yul\":15704:15716 */\n dup3\n dup2\n add\n /* \"#utility.yul\":15700:15721 */\n dup10\n add\n /* \"#utility.yul\":15694:15722 */\n mload\n /* \"#utility.yul\":15671:15687 */\n dup11\n dup3\n add\n /* \"#utility.yul\":15667:15692 */\n dup11\n add\n /* \"#utility.yul\":15660:15723 */\n mstore\n /* \"#utility.yul\":15615:15627 */\n dup9\n add\n /* \"#utility.yul\":15580:15737 */\n jump(tag_223)\n tag_225:\n pop\n /* \"#utility.yul\":15761:15782 */\n dup9\n dup2\n add\n /* \"#utility.yul\":15757:15787 */\n dup9\n add\n /* \"#utility.yul\":15750:15791 */\n dup5\n swap1\n mstore\n /* \"#utility.yul\":15857:15859 */\n 0x1f\n /* \"#utility.yul\":15834:15851 */\n add\n not(0x1f)\n /* \"#utility.yul\":15830:15861 */\n and\n /* \"#utility.yul\":15818:15862 */\n swap1\n swap8\n add\n /* \"#utility.yul\":15814:15867 */\n dup7\n add\n swap7\n pop\n /* \"#utility.yul\":15890:15905 */\n swap4\n dup6\n add\n swap4\n /* \"#utility.yul\":15927:15941 */\n swap3\n dup6\n add\n swap3\n /* \"#utility.yul\":15359:15360 */\n 0x01\n /* \"#utility.yul\":15350:15361 */\n add\n /* \"#utility.yul\":15317:15951 */\n jump(tag_220)\n tag_222:\n pop\n /* \"#utility.yul\":15967:15973 */\n swap5\n swap9\n /* \"#utility.yul\":14788:15979 */\n swap8\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16091:16821 */\n tag_35:\n /* \"#utility.yul\":16450:16453 */\n 0xa0\n /* \"#utility.yul\":16439:16448 */\n dup2\n /* \"#utility.yul\":16432:16454 */\n mstore\n /* \"#utility.yul\":16413:16417 */\n 0x00\n /* \"#utility.yul\":16477:16537 */\n tag_228\n /* \"#utility.yul\":16532:16535 */\n 0xa0\n /* \"#utility.yul\":16521:16530 */\n dup4\n /* \"#utility.yul\":16517:16536 */\n add\n /* \"#utility.yul\":16509:16515 */\n dup9\n /* \"#utility.yul\":16477:16537 */\n tag_83\n jump\t// in\n tag_228:\n /* \"#utility.yul\":16573:16579 */\n dup7\n /* \"#utility.yul\":16568:16570 */\n 0x20\n /* \"#utility.yul\":16557:16566 */\n dup5\n /* \"#utility.yul\":16553:16571 */\n add\n /* \"#utility.yul\":16546:16580 */\n mstore\n /* \"#utility.yul\":16616:16622 */\n dup6\n /* \"#utility.yul\":16611:16613 */\n 0x40\n /* \"#utility.yul\":16600:16609 */\n dup5\n /* \"#utility.yul\":16596:16614 */\n add\n /* \"#utility.yul\":16589:16623 */\n mstore\n /* \"#utility.yul\":16671:16680 */\n dup3\n /* \"#utility.yul\":16663:16669 */\n dup2\n /* \"#utility.yul\":16659:16681 */\n sub\n /* \"#utility.yul\":16654:16656 */\n 0x60\n /* \"#utility.yul\":16643:16652 */\n dup5\n /* \"#utility.yul\":16639:16657 */\n add\n /* \"#utility.yul\":16632:16682 */\n mstore\n /* \"#utility.yul\":16699:16746 */\n tag_229\n /* \"#utility.yul\":16739:16745 */\n dup2\n /* \"#utility.yul\":16731:16737 */\n dup7\n /* \"#utility.yul\":16699:16746 */\n tag_83\n jump\t// in\n tag_229:\n /* \"#utility.yul\":16691:16746 */\n swap2\n pop\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":16787:16793 */\n dup4\n /* \"#utility.yul\":16783:16814 */\n and\n /* \"#utility.yul\":16777:16780 */\n 0x80\n /* \"#utility.yul\":16766:16775 */\n dup4\n /* \"#utility.yul\":16762:16781 */\n add\n /* \"#utility.yul\":16755:16815 */\n mstore\n /* \"#utility.yul\":16091:16821 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16826:17436 */\n tag_41:\n /* \"#utility.yul\":17154:17155 */\n 0x01\n /* \"#utility.yul\":17150:17151 */\n dup1\n /* \"#utility.yul\":17145:17148 */\n 0xa0\n /* \"#utility.yul\":17141:17152 */\n shl\n /* \"#utility.yul\":17137:17156 */\n sub\n /* \"#utility.yul\":17129:17135 */\n dup7\n /* \"#utility.yul\":17125:17157 */\n and\n /* \"#utility.yul\":17114:17123 */\n dup2\n /* \"#utility.yul\":17107:17158 */\n mstore\n /* \"#utility.yul\":17194:17200 */\n dup5\n /* \"#utility.yul\":17189:17191 */\n 0x20\n /* \"#utility.yul\":17178:17187 */\n dup3\n /* \"#utility.yul\":17174:17192 */\n add\n /* \"#utility.yul\":17167:17201 */\n mstore\n /* \"#utility.yul\":17237:17243 */\n dup4\n /* \"#utility.yul\":17232:17234 */\n 0x40\n /* \"#utility.yul\":17221:17230 */\n dup3\n /* \"#utility.yul\":17217:17235 */\n add\n /* \"#utility.yul\":17210:17244 */\n mstore\n /* \"#utility.yul\":17280:17283 */\n 0xa0\n /* \"#utility.yul\":17275:17277 */\n 0x60\n /* \"#utility.yul\":17264:17273 */\n dup3\n /* \"#utility.yul\":17260:17278 */\n add\n /* \"#utility.yul\":17253:17284 */\n mstore\n /* \"#utility.yul\":17088:17092 */\n 0x00\n /* \"#utility.yul\":17301:17361 */\n tag_231\n /* \"#utility.yul\":17356:17359 */\n 0xa0\n /* \"#utility.yul\":17345:17354 */\n dup4\n /* \"#utility.yul\":17341:17360 */\n add\n /* \"#utility.yul\":17333:17339 */\n dup6\n /* \"#utility.yul\":17301:17361 */\n tag_83\n jump\t// in\n tag_231:\n /* \"#utility.yul\":17293:17361 */\n swap1\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":17402:17408 */\n dup4\n /* \"#utility.yul\":17398:17429 */\n and\n /* \"#utility.yul\":17392:17395 */\n 0x80\n /* \"#utility.yul\":17381:17390 */\n dup4\n /* \"#utility.yul\":17377:17396 */\n add\n /* \"#utility.yul\":17370:17430 */\n mstore\n /* \"#utility.yul\":16826:17436 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17540:18981 */\n tag_47:\n /* \"#utility.yul\":17876:17880 */\n 0x00\n /* \"#utility.yul\":17924:17927 */\n 0x80\n /* \"#utility.yul\":17913:17922 */\n dup3\n /* \"#utility.yul\":17909:17928 */\n add\n /* \"#utility.yul\":17955:17958 */\n 0x80\n /* \"#utility.yul\":17944:17953 */\n dup4\n /* \"#utility.yul\":17937:17959 */\n mstore\n /* \"#utility.yul\":17979:17985 */\n dup1\n /* \"#utility.yul\":18014:18020 */\n dup8\n /* \"#utility.yul\":18008:18021 */\n mload\n /* \"#utility.yul\":18045:18051 */\n dup1\n /* \"#utility.yul\":18037:18043 */\n dup4\n /* \"#utility.yul\":18030:18052 */\n mstore\n /* \"#utility.yul\":18083:18086 */\n 0xa0\n /* \"#utility.yul\":18072:18081 */\n dup6\n /* \"#utility.yul\":18068:18087 */\n add\n /* \"#utility.yul\":18061:18087 */\n swap2\n pop\n /* \"#utility.yul\":18146:18149 */\n 0xa0\n /* \"#utility.yul\":18136:18142 */\n dup2\n /* \"#utility.yul\":18133:18134 */\n 0x05\n /* \"#utility.yul\":18129:18143 */\n shl\n /* \"#utility.yul\":18118:18127 */\n dup7\n /* \"#utility.yul\":18114:18144 */\n add\n /* \"#utility.yul\":18110:18150 */\n add\n /* \"#utility.yul\":18096:18150 */\n swap3\n pop\n /* \"#utility.yul\":18169:18173 */\n 0x20\n /* \"#utility.yul\":18208:18210 */\n dup1\n /* \"#utility.yul\":18200:18206 */\n dup11\n /* \"#utility.yul\":18196:18211 */\n add\n /* \"#utility.yul\":18229:18230 */\n 0x00\n /* \"#utility.yul\":18239:18742 */\n tag_234:\n /* \"#utility.yul\":18253:18259 */\n dup4\n /* \"#utility.yul\":18250:18251 */\n dup2\n /* \"#utility.yul\":18247:18260 */\n lt\n /* \"#utility.yul\":18239:18742 */\n iszero\n tag_236\n jumpi\n /* \"#utility.yul\":18346:18349 */\n 0x9f\n /* \"#utility.yul\":18342:18350 */\n not\n /* \"#utility.yul\":18330:18339 */\n dup9\n /* \"#utility.yul\":18322:18328 */\n dup8\n /* \"#utility.yul\":18318:18340 */\n sub\n /* \"#utility.yul\":18314:18351 */\n add\n /* \"#utility.yul\":18309:18312 */\n dup6\n /* \"#utility.yul\":18302:18352 */\n mstore\n /* \"#utility.yul\":18381:18387 */\n dup2\n /* \"#utility.yul\":18375:18388 */\n mload\n /* \"#utility.yul\":18411:18415 */\n 0x40\n /* \"#utility.yul\":18454:18456 */\n dup2\n /* \"#utility.yul\":18448:18457 */\n mload\n /* \"#utility.yul\":18485:18487 */\n dup2\n /* \"#utility.yul\":18477:18483 */\n dup10\n /* \"#utility.yul\":18470:18488 */\n mstore\n /* \"#utility.yul\":18515:18577 */\n tag_237\n /* \"#utility.yul\":18573:18575 */\n dup3\n /* \"#utility.yul\":18565:18571 */\n dup11\n /* \"#utility.yul\":18561:18576 */\n add\n /* \"#utility.yul\":18547:18559 */\n dup3\n /* \"#utility.yul\":18515:18577 */\n tag_83\n jump\t// in\n tag_237:\n /* \"#utility.yul\":18620:18631 */\n swap3\n dup7\n add\n /* \"#utility.yul\":18614:18632 */\n mload\n /* \"#utility.yul\":18597:18612 */\n swap9\n dup7\n add\n /* \"#utility.yul\":18590:18633 */\n swap9\n swap1\n swap9\n mstore\n pop\n /* \"#utility.yul\":18501:18577 */\n swap6\n pop\n /* \"#utility.yul\":18720:18732 */\n swap4\n dup3\n add\n swap4\n /* \"#utility.yul\":18685:18700 */\n swap1\n dup3\n add\n swap1\n /* \"#utility.yul\":18275:18276 */\n 0x01\n /* \"#utility.yul\":18268:18277 */\n add\n /* \"#utility.yul\":18239:18742 */\n jump(tag_234)\n tag_236:\n pop\n pop\n /* \"#utility.yul\":17517:17527 */\n 0xffffffff\n /* \"#utility.yul\":17506:17528 */\n dup10\n and\n /* \"#utility.yul\":18777:18795 */\n swap1\n dup7\n add\n /* \"#utility.yul\":17494:17529 */\n mstore\n pop\n pop\n /* \"#utility.yul\":18834:18856 */\n dup3\n dup2\n sub\n /* \"#utility.yul\":18827:18831 */\n 0x40\n /* \"#utility.yul\":18812:18832 */\n dup5\n add\n /* \"#utility.yul\":18805:18857 */\n mstore\n /* \"#utility.yul\":18874:18921 */\n tag_239\n /* \"#utility.yul\":18838:18844 */\n dup2\n /* \"#utility.yul\":18906:18912 */\n dup7\n /* \"#utility.yul\":18874:18921 */\n tag_83\n jump\t// in\n tag_239:\n /* \"#utility.yul\":18866:18921 */\n swap2\n pop\n pop\n /* \"#utility.yul\":18930:18975 */\n tag_240\n /* \"#utility.yul\":18971:18973 */\n 0x60\n /* \"#utility.yul\":18960:18969 */\n dup4\n /* \"#utility.yul\":18956:18974 */\n add\n /* \"#utility.yul\":18948:18954 */\n dup5\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":16049:16079 */\n and\n /* \"#utility.yul\":16037:16080 */\n swap1\n mstore\n /* \"#utility.yul\":15984:16086 */\n jump\n /* \"#utility.yul\":18930:18975 */\n tag_240:\n /* \"#utility.yul\":17540:18981 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18986:20153 */\n tag_53:\n /* \"#utility.yul\":19366:19369 */\n 0x80\n /* \"#utility.yul\":19379:19401 */\n dup1\n dup3\n mstore\n /* \"#utility.yul\":19450:19463 */\n dup6\n mload\n /* \"#utility.yul\":19351:19370 */\n swap1\n dup3\n add\n /* \"#utility.yul\":19472:19494 */\n dup2\n swap1\n mstore\n /* \"#utility.yul\":19318:19322 */\n 0x00\n swap1\n /* \"#utility.yul\":19548:19552 */\n 0x20\n swap1\n /* \"#utility.yul\":19525:19528 */\n 0xa0\n /* \"#utility.yul\":19510:19529 */\n dup5\n add\n swap1\n /* \"#utility.yul\":19575:19590 */\n dup3\n dup10\n add\n /* \"#utility.yul\":19318:19322 */\n dup5\n /* \"#utility.yul\":19618:19900 */\n tag_242:\n /* \"#utility.yul\":19632:19638 */\n dup3\n /* \"#utility.yul\":19629:19630 */\n dup2\n /* \"#utility.yul\":19626:19639 */\n lt\n /* \"#utility.yul\":19618:19900 */\n iszero\n tag_244\n jumpi\n /* \"#utility.yul\":19691:19704 */\n dup2\n mload\n /* \"#utility.yul\":19733:19742 */\n dup1\n mload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":19729:19764 */\n and\n /* \"#utility.yul\":19717:19765 */\n dup6\n mstore\n /* \"#utility.yul\":19805:19816 */\n dup6\n add\n /* \"#utility.yul\":19799:19817 */\n mload\n /* \"#utility.yul\":19785:19797 */\n dup6\n dup6\n add\n /* \"#utility.yul\":19778:19818 */\n mstore\n /* \"#utility.yul\":19847:19851 */\n 0x40\n /* \"#utility.yul\":19838:19852 */\n swap1\n swap4\n add\n swap3\n /* \"#utility.yul\":19875:19890 */\n swap1\n dup5\n add\n swap1\n /* \"#utility.yul\":19761:19762 */\n 0x01\n /* \"#utility.yul\":19647:19656 */\n add\n /* \"#utility.yul\":19618:19900 */\n jump(tag_242)\n tag_244:\n /* \"#utility.yul\":19622:19625 */\n pop\n pop\n pop\n /* \"#utility.yul\":19948:19958 */\n 0xffffffff\n /* \"#utility.yul\":19940:19946 */\n dup8\n /* \"#utility.yul\":19936:19959 */\n and\n /* \"#utility.yul\":19931:19933 */\n dup3\n /* \"#utility.yul\":19920:19929 */\n dup6\n /* \"#utility.yul\":19916:19934 */\n add\n /* \"#utility.yul\":19909:19960 */\n mstore\n /* \"#utility.yul\":20007:20016 */\n dup4\n /* \"#utility.yul\":20002:20005 */\n dup2\n /* \"#utility.yul\":19998:20017 */\n sub\n /* \"#utility.yul\":19991:19995 */\n 0x40\n /* \"#utility.yul\":19980:19989 */\n dup6\n /* \"#utility.yul\":19976:19996 */\n add\n /* \"#utility.yul\":19969:20018 */\n mstore\n /* \"#utility.yul\":20035:20079 */\n tag_245\n /* \"#utility.yul\":20075:20078 */\n dup2\n /* \"#utility.yul\":20067:20073 */\n dup8\n /* \"#utility.yul\":20035:20079 */\n tag_83\n jump\t// in\n tag_245:\n /* \"#utility.yul\":20027:20079 */\n swap3\n pop\n pop\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":20119:20125 */\n dup4\n /* \"#utility.yul\":20115:20146 */\n and\n /* \"#utility.yul\":20110:20112 */\n 0x60\n /* \"#utility.yul\":20099:20108 */\n dup4\n /* \"#utility.yul\":20095:20113 */\n add\n /* \"#utility.yul\":20088:20147 */\n mstore\n /* \"#utility.yul\":18986:20153 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20158:20816 */\n tag_59:\n /* \"#utility.yul\":20489:20492 */\n 0x80\n /* \"#utility.yul\":20478:20487 */\n dup2\n /* \"#utility.yul\":20471:20493 */\n mstore\n /* \"#utility.yul\":20452:20456 */\n 0x00\n /* \"#utility.yul\":20516:20576 */\n tag_247\n /* \"#utility.yul\":20571:20574 */\n 0x80\n /* \"#utility.yul\":20560:20569 */\n dup4\n /* \"#utility.yul\":20556:20575 */\n add\n /* \"#utility.yul\":20548:20554 */\n dup8\n /* \"#utility.yul\":20516:20576 */\n tag_83\n jump\t// in\n tag_247:\n /* \"#utility.yul\":20612:20618 */\n dup6\n /* \"#utility.yul\":20607:20609 */\n 0x20\n /* \"#utility.yul\":20596:20605 */\n dup5\n /* \"#utility.yul\":20592:20610 */\n add\n /* \"#utility.yul\":20585:20619 */\n mstore\n /* \"#utility.yul\":20667:20676 */\n dup3\n /* \"#utility.yul\":20659:20665 */\n dup2\n /* \"#utility.yul\":20655:20677 */\n sub\n /* \"#utility.yul\":20650:20652 */\n 0x40\n /* \"#utility.yul\":20639:20648 */\n dup5\n /* \"#utility.yul\":20635:20653 */\n add\n /* \"#utility.yul\":20628:20678 */\n mstore\n /* \"#utility.yul\":20695:20742 */\n tag_248\n /* \"#utility.yul\":20735:20741 */\n dup2\n /* \"#utility.yul\":20727:20733 */\n dup7\n /* \"#utility.yul\":20695:20742 */\n tag_83\n jump\t// in\n tag_248:\n /* \"#utility.yul\":20687:20742 */\n swap2\n pop\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":20782:20788 */\n dup4\n /* \"#utility.yul\":20778:20809 */\n and\n /* \"#utility.yul\":20773:20775 */\n 0x60\n /* \"#utility.yul\":20762:20771 */\n dup4\n /* \"#utility.yul\":20758:20776 */\n add\n /* \"#utility.yul\":20751:20810 */\n mstore\n /* \"#utility.yul\":20158:20816 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20821:21359 */\n tag_65:\n /* \"#utility.yul\":21121:21122 */\n 0x01\n /* \"#utility.yul\":21117:21118 */\n dup1\n /* \"#utility.yul\":21112:21115 */\n 0xa0\n /* \"#utility.yul\":21108:21119 */\n shl\n /* \"#utility.yul\":21104:21123 */\n sub\n /* \"#utility.yul\":21096:21102 */\n dup6\n /* \"#utility.yul\":21092:21124 */\n and\n /* \"#utility.yul\":21081:21090 */\n dup2\n /* \"#utility.yul\":21074:21125 */\n mstore\n /* \"#utility.yul\":21161:21167 */\n dup4\n /* \"#utility.yul\":21156:21158 */\n 0x20\n /* \"#utility.yul\":21145:21154 */\n dup3\n /* \"#utility.yul\":21141:21159 */\n add\n /* \"#utility.yul\":21134:21168 */\n mstore\n /* \"#utility.yul\":21204:21207 */\n 0x80\n /* \"#utility.yul\":21199:21201 */\n 0x40\n /* \"#utility.yul\":21188:21197 */\n dup3\n /* \"#utility.yul\":21184:21202 */\n add\n /* \"#utility.yul\":21177:21208 */\n mstore\n /* \"#utility.yul\":21055:21059 */\n 0x00\n /* \"#utility.yul\":21225:21285 */\n tag_250\n /* \"#utility.yul\":21280:21283 */\n 0x80\n /* \"#utility.yul\":21269:21278 */\n dup4\n /* \"#utility.yul\":21265:21284 */\n add\n /* \"#utility.yul\":21257:21263 */\n dup6\n /* \"#utility.yul\":21225:21285 */\n tag_83\n jump\t// in\n tag_250:\n /* \"#utility.yul\":21217:21285 */\n swap1\n pop\n sub(shl(0x40, 0x01), 0x01)\n /* \"#utility.yul\":21325:21331 */\n dup4\n /* \"#utility.yul\":21321:21352 */\n and\n /* \"#utility.yul\":21316:21318 */\n 0x60\n /* \"#utility.yul\":21305:21314 */\n dup4\n /* \"#utility.yul\":21301:21319 */\n add\n /* \"#utility.yul\":21294:21353 */\n mstore\n /* \"#utility.yul\":20821:21359 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122075f5e5c3b6cc37a9c35ed64b92d75971c7fccfd27ecc159ed21810a49ab50c0864736f6c63430008130033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50610f1f8061006d6000396000f3fe608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50600436106100af5760003560e01c8063150c016a146101145780633e506ef014610129578063797b45fd1461013c578063ab9463231461014f578063b4f76f9614610162578063b9f813ff14610175575b60405162461bcd60e51b815260206004820152603560248201527f436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b2060448201908152746e6f7220726563656976652066756e6374696f6e7360581b6064830152608482fd5b6101276101223660046107cd565b610188565b005b610127610137366004610874565b61023e565b61012761014a3660046108e4565b61026b565b61012761015d366004610a32565b61031e565b610127610170366004610b40565b610349565b610127610183366004610b9f565b610374565b604051630a8600b560e11b81526108049063150c016a906101b59088908890889088908890600401610c95565b600060405180830381600087803b15801561021f5760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610233573d6000803e3d6000fd5b505050505050505050565b6040516303e506ef60e41b815261080490633e506ef0906101b59088908890889088908890600401610ce2565b60405163797b45fd60e01b81526108049063797b45fd90610296908790879087908790600401610d2a565b600060405180830381600087803b1580156103005760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610314573d6000803e3d6000fd5b5050505050505050565b60405163ab94632360e01b81526108049063ab94632390610296908790879087908790600401610dd9565b604051635a7bb7cb60e11b81526108049063b4f76f9690610296908790879087908790600401610e62565b60405163b9f813ff60e01b81526108049063b9f813ff90610296908790879087908790600401610ea8565b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a207475706c65206461746120746f6f2073686f6044820152611c9d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a20696e76616c6964207475706c65206f666673604482015261195d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20737472756374206461746120746f6f2073686044820152621bdc9d60ea1b6064820152608481fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104c8576104c8610490565b60405290565b604051601f8201601f191681016001600160401b03811182821017156104f6576104f6610490565b604052919050565b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20696e76616c696420737472756374206f66666044820152621cd95d60ea1b6064820152608481fd5b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a1c9c985e481bd9999cd95d60aa1b6064820152608481fd5b60006001600160401b038211156105c1576105c1610490565b5060051b60200190565b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a727261792073747269646560a81b6064820152608481fd5b6000604080838503121561063a5761063a61043f565b6106426104a6565b9150823560ff8116811461065557600080fd5b82526020838101356001600160401b0380821115610675576106756104fe565b8186019150601f878184011261068d5761068d61054f565b82356106a061069b826105a8565b6104ce565b81815260059190911b8401850190858101908a8311156106c2576106c26105cb565b8686015b8381101561079d578035868111156106e0576106e061054f565b8701603f81018d136106f4576106f461054f565b888101358781111561070857610708610490565b610719818801601f19168b016104ce565b8181528e8c83850101111561077c578b5162461bcd60e51b8152600481018c9052602760248201527f414249206465636f64696e673a20696e76616c69642062797465206172726179604482015266040d8cadccee8d60cb1b6064820152608481fd5b818c84018c83013760009181018b01919091528452509187019187016106c6565b5080878a0152505050505050505092915050565b80356001600160401b03811681146107c857600080fd5b919050565b600080600080600060a086880312156107e8576107e861039f565b85356001600160401b0380821115610802576108026103ef565b61080e89838a01610624565b965060208801359550604088013594506060880135915080821115610835576108356103ef565b5061084288828901610624565b925050610851608087016107b1565b90509295509295909350565b80356001600160a01b03811681146107c857600080fd5b600080600080600060a0868803121561088f5761088f61039f565b6108988661085d565b9450602086013593506040860135925060608601356001600160401b038111156108c4576108c46103ef565b61084288828901610624565b803563ffffffff811681146107c857600080fd5b600080600080608085870312156108fd576108fd61039f565b6001600160401b038086351115610916576109166103ef565b8535860187601f82011261092c5761092c61054f565b61093961069b82356105a8565b81358082526020808301929160051b8401018a81111561095b5761095b6105cb565b602084015b818110156109e05785813511156109795761097961054f565b803585016040818e03601f190112156109945761099461043f565b61099c6104a6565b6020820135888111156109b1576109b16104fe565b6109c08f602083860101610624565b825250604091909101356020808301919091529085529384019301610960565b50508097505050506109f4602087016108d0565b9350604086013581811115610a0b57610a0b6103ef565b610a1788828901610624565b93505050610a27606086016107b1565b905092959194509250565b60008060008060808587031215610a4b57610a4b61039f565b84356001600160401b0380821115610a6557610a656103ef565b818701915087601f830112610a7c57610a7c61054f565b81356020610a8c61069b836105a8565b82815260069290921b8401810191818101908b841115610aae57610aae6105cb565b948201945b83861015610afa576040868d031215610ace57610ace61043f565b610ad66104a6565b610adf8761085d565b81528684013584820152825260409095019490820190610ab3565b9850610b0990508982016108d0565b965050506040870135915080821115610b2457610b246103ef565b50610b3187828801610624565b925050610a27606086016107b1565b60008060008060808587031215610b5957610b5961039f565b84356001600160401b0380821115610b7357610b736103ef565b610b7f88838901610624565b9550602087013594506040870135915080821115610b2457610b246103ef565b60008060008060808587031215610bb857610bb861039f565b610bc18561085d565b93506020850135925060408501356001600160401b03811115610be657610be66103ef565b610b3187828801610624565b60006040830160ff835116845260208084015160408287015282815180855260608801915060608160051b890101945083830192506000805b82811015610c8757898703605f1901845284518051808952835b81811015610c60578281018901518a82018a01528801610c45565b508881018801849052601f01601f1916909701860196509385019392850192600101610c2b565b509498975050505050505050565b60a081526000610ca860a0830188610bf2565b8660208401528560408401528281036060840152610cc68186610bf2565b9150506001600160401b03831660808301529695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000610d0f60a0830185610bf2565b90506001600160401b03831660808301529695505050505050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b83811015610d9757609f19888703018552815160408151818952610d79828a0182610bf2565b92860151988601989098525095509382019390820190600101610d53565b505063ffffffff89169086015250508281036040840152610db88186610bf2565b915050610dd060608301846001600160401b03169052565b95945050505050565b6080808252855190820181905260009060209060a0840190828901845b82811015610e2657815180516001600160a01b031685528501518585015260409093019290840190600101610df6565b50505063ffffffff8716828501528381036040850152610e468187610bf2565b925050506001600160401b038316606083015295945050505050565b608081526000610e756080830187610bf2565b8560208401528281036040840152610e8d8186610bf2565b9150506001600160401b038316606083015295945050505050565b60018060a01b0385168152836020820152608060408201526000610ecf6080830185610bf2565b90506001600160401b03831660608301529594505050505056fea26469706673582212202085c2310b813aa1a9795bbb224210110ff7fcebe903592aa6e53d5dd059fe5964736f6c63430008130033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45746865722073656E7420746F206E6F6E2D70617961626C652066756E637469 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x37B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP PUSH2 0xF1F DUP1 PUSH2 0x6D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45746865722073656E7420746F206E6F6E2D70617961626C652066756E637469 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x37B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150C016A EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x3E506EF0 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x797B45FD EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xAB946323 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0xB4F76F96 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x175 JUMPI JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420646F6573206E6F7420686176652066616C6C6261636B20 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH21 0x6E6F7220726563656976652066756E6374696F6E73 PUSH1 0x58 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST PUSH2 0x127 PUSH2 0x122 CALLDATASIZE PUSH1 0x4 PUSH2 0x7CD JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x874 JUMP JUMPDEST PUSH2 0x23E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0x8E4 JUMP JUMPDEST PUSH2 0x26B JUMP JUMPDEST PUSH2 0x127 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xA32 JUMP JUMPDEST PUSH2 0x31E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0xB40 JUMP JUMPDEST PUSH2 0x349 JUMP JUMPDEST PUSH2 0x127 PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0xB9F JUMP JUMPDEST PUSH2 0x374 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA8600B5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x150C016A SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x233 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E506EF PUSH1 0xE4 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x3E506EF0 SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xCE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x797B45FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x797B45FD SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x300 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x314 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAB946323 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xAB946323 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xDD9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5A7BB7CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB4F76F96 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB9F813FF PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB9F813FF SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xEA8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A207475706C65206461746120746F6F2073686F PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x1C9D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C6964207475706C65206F666673 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20737472756374206461746120746F6F207368 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1BDC9D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4C8 JUMPI PUSH2 0x4C8 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F6 JUMPI PUSH2 0x4F6 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C696420737472756374206F6666 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1CD95D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1C9C985E481BD9999CD95D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x5C1 JUMPI PUSH2 0x5C1 PUSH2 0x490 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x7272617920737472696465 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x63A JUMPI PUSH2 0x63A PUSH2 0x43F JUMP JUMPDEST PUSH2 0x642 PUSH2 0x4A6 JUMP JUMPDEST SWAP2 POP DUP3 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x675 JUMPI PUSH2 0x675 PUSH2 0x4FE JUMP JUMPDEST DUP2 DUP7 ADD SWAP2 POP PUSH1 0x1F DUP8 DUP2 DUP5 ADD SLT PUSH2 0x68D JUMPI PUSH2 0x68D PUSH2 0x54F JUMP JUMPDEST DUP3 CALLDATALOAD PUSH2 0x6A0 PUSH2 0x69B DUP3 PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP5 ADD DUP6 ADD SWAP1 DUP6 DUP2 ADD SWAP1 DUP11 DUP4 GT ISZERO PUSH2 0x6C2 JUMPI PUSH2 0x6C2 PUSH2 0x5CB JUMP JUMPDEST DUP7 DUP7 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x79D JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x6E0 JUMPI PUSH2 0x6E0 PUSH2 0x54F JUMP JUMPDEST DUP8 ADD PUSH1 0x3F DUP2 ADD DUP14 SGT PUSH2 0x6F4 JUMPI PUSH2 0x6F4 PUSH2 0x54F JUMP JUMPDEST DUP9 DUP2 ADD CALLDATALOAD DUP8 DUP2 GT ISZERO PUSH2 0x708 JUMPI PUSH2 0x708 PUSH2 0x490 JUMP JUMPDEST PUSH2 0x719 DUP2 DUP9 ADD PUSH1 0x1F NOT AND DUP12 ADD PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE DUP15 DUP13 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x77C JUMPI DUP12 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642062797465206172726179 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x40D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST DUP2 DUP13 DUP5 ADD DUP13 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MSTORE POP SWAP2 DUP8 ADD SWAP2 DUP8 ADD PUSH2 0x6C6 JUMP JUMPDEST POP DUP1 DUP8 DUP11 ADD MSTORE POP POP POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7E8 JUMPI PUSH2 0x7E8 PUSH2 0x39F JUMP JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH2 0x802 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x80E DUP10 DUP4 DUP11 ADD PUSH2 0x624 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x835 JUMPI PUSH2 0x835 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x851 PUSH1 0x80 DUP8 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x88F JUMPI PUSH2 0x88F PUSH2 0x39F JUMP JUMPDEST PUSH2 0x898 DUP7 PUSH2 0x85D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x8C4 JUMPI PUSH2 0x8C4 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x8FD JUMPI PUSH2 0x8FD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP7 CALLDATALOAD GT ISZERO PUSH2 0x916 JUMPI PUSH2 0x916 PUSH2 0x3EF JUMP JUMPDEST DUP6 CALLDATALOAD DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x92C JUMPI PUSH2 0x92C PUSH2 0x54F JUMP JUMPDEST PUSH2 0x939 PUSH2 0x69B DUP3 CALLDATALOAD PUSH2 0x5A8 JUMP JUMPDEST DUP2 CALLDATALOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 SWAP2 PUSH1 0x5 SHL DUP5 ADD ADD DUP11 DUP2 GT ISZERO PUSH2 0x95B JUMPI PUSH2 0x95B PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E0 JUMPI DUP6 DUP2 CALLDATALOAD GT ISZERO PUSH2 0x979 JUMPI PUSH2 0x979 PUSH2 0x54F JUMP JUMPDEST DUP1 CALLDATALOAD DUP6 ADD PUSH1 0x40 DUP2 DUP15 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH2 0x994 JUMPI PUSH2 0x994 PUSH2 0x43F JUMP JUMPDEST PUSH2 0x99C PUSH2 0x4A6 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP9 DUP2 GT ISZERO PUSH2 0x9B1 JUMPI PUSH2 0x9B1 PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x9C0 DUP16 PUSH1 0x20 DUP4 DUP7 ADD ADD PUSH2 0x624 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x960 JUMP JUMPDEST POP POP DUP1 SWAP8 POP POP POP POP PUSH2 0x9F4 PUSH1 0x20 DUP8 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xA17 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP4 POP POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xA4B JUMPI PUSH2 0xA4B PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xA65 JUMPI PUSH2 0xA65 PUSH2 0x3EF JUMP JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0x54F JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0xA8C PUSH2 0x69B DUP4 PUSH2 0x5A8 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x6 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP12 DUP5 GT ISZERO PUSH2 0xAAE JUMPI PUSH2 0xAAE PUSH2 0x5CB JUMP JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0xAFA JUMPI PUSH1 0x40 DUP7 DUP14 SUB SLT ISZERO PUSH2 0xACE JUMPI PUSH2 0xACE PUSH2 0x43F JUMP JUMPDEST PUSH2 0xAD6 PUSH2 0x4A6 JUMP JUMPDEST PUSH2 0xADF DUP8 PUSH2 0x85D JUMP JUMPDEST DUP2 MSTORE DUP7 DUP5 ADD CALLDATALOAD DUP5 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP6 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0xAB3 JUMP JUMPDEST SWAP9 POP PUSH2 0xB09 SWAP1 POP DUP10 DUP3 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP7 POP POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB59 JUMPI PUSH2 0xB59 PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xB73 JUMPI PUSH2 0xB73 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB7F DUP9 DUP4 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBB8 JUMPI PUSH2 0xBB8 PUSH2 0x39F JUMP JUMPDEST PUSH2 0xBC1 DUP6 PUSH2 0x85D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xBE6 JUMPI PUSH2 0xBE6 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0xFF DUP4 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP3 DUP8 ADD MSTORE DUP3 DUP2 MLOAD DUP1 DUP6 MSTORE PUSH1 0x60 DUP9 ADD SWAP2 POP PUSH1 0x60 DUP2 PUSH1 0x5 SHL DUP10 ADD ADD SWAP5 POP DUP4 DUP4 ADD SWAP3 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xC87 JUMPI DUP10 DUP8 SUB PUSH1 0x5F NOT ADD DUP5 MSTORE DUP5 MLOAD DUP1 MLOAD DUP1 DUP10 MSTORE DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC60 JUMPI DUP3 DUP2 ADD DUP10 ADD MLOAD DUP11 DUP3 ADD DUP11 ADD MSTORE DUP9 ADD PUSH2 0xC45 JUMP JUMPDEST POP DUP9 DUP2 ADD DUP9 ADD DUP5 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 SWAP8 ADD DUP7 ADD SWAP7 POP SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xC2B JUMP JUMPDEST POP SWAP5 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA0 DUP2 MSTORE PUSH1 0x0 PUSH2 0xCA8 PUSH1 0xA0 DUP4 ADD DUP9 PUSH2 0xBF2 JUMP JUMPDEST DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0xCC6 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xD0F PUSH1 0xA0 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD PUSH1 0x80 DUP4 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 POP PUSH1 0xA0 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP1 DUP11 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD97 JUMPI PUSH1 0x9F NOT DUP9 DUP8 SUB ADD DUP6 MSTORE DUP2 MLOAD PUSH1 0x40 DUP2 MLOAD DUP2 DUP10 MSTORE PUSH2 0xD79 DUP3 DUP11 ADD DUP3 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 DUP7 ADD MLOAD SWAP9 DUP7 ADD SWAP9 SWAP1 SWAP9 MSTORE POP SWAP6 POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xD53 JUMP JUMPDEST POP POP PUSH4 0xFFFFFFFF DUP10 AND SWAP1 DUP7 ADD MSTORE POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xDB8 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xDD0 PUSH1 0x60 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP1 DUP3 MSTORE DUP6 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xA0 DUP5 ADD SWAP1 DUP3 DUP10 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xE26 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP6 ADD MLOAD DUP6 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xDF6 JUMP JUMPDEST POP POP POP PUSH4 0xFFFFFFFF DUP8 AND DUP3 DUP6 ADD MSTORE DUP4 DUP2 SUB PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xE46 DUP2 DUP8 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE75 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0xBF2 JUMP JUMPDEST DUP6 PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xE8D DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xECF PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 DUP6 0xC2 BALANCE SIGNEXTEND DUP2 GASPRICE LOG1 0xA9 PUSH26 0x5BBB224210110FF7FCEBE903592AA6E53D5DD059FE5964736F6C PUSH4 0x43000813 STOP CALLER ", + "object": "608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50610f1f8061006d6000396000f3fe608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50600436106100af5760003560e01c8063150c016a146101145780633e506ef014610129578063797b45fd1461013c578063ab9463231461014f578063b4f76f9614610162578063b9f813ff14610175575b60405162461bcd60e51b815260206004820152603560248201527f436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b2060448201908152746e6f7220726563656976652066756e6374696f6e7360581b6064830152608482fd5b6101276101223660046107cd565b610188565b005b610127610137366004610874565b61023e565b61012761014a3660046108e4565b61026b565b61012761015d366004610a32565b61031e565b610127610170366004610b40565b610349565b610127610183366004610b9f565b610374565b604051630a8600b560e11b81526108049063150c016a906101b59088908890889088908890600401610c95565b600060405180830381600087803b15801561021f5760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610233573d6000803e3d6000fd5b505050505050505050565b6040516303e506ef60e41b815261080490633e506ef0906101b59088908890889088908890600401610ce2565b60405163797b45fd60e01b81526108049063797b45fd90610296908790879087908790600401610d2a565b600060405180830381600087803b1580156103005760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610314573d6000803e3d6000fd5b5050505050505050565b60405163ab94632360e01b81526108049063ab94632390610296908790879087908790600401610dd9565b604051635a7bb7cb60e11b81526108049063b4f76f9690610296908790879087908790600401610e62565b60405163b9f813ff60e01b81526108049063b9f813ff90610296908790879087908790600401610ea8565b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a207475706c65206461746120746f6f2073686f6044820152611c9d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a20696e76616c6964207475706c65206f666673604482015261195d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20737472756374206461746120746f6f2073686044820152621bdc9d60ea1b6064820152608481fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104c8576104c8610490565b60405290565b604051601f8201601f191681016001600160401b03811182821017156104f6576104f6610490565b604052919050565b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20696e76616c696420737472756374206f66666044820152621cd95d60ea1b6064820152608481fd5b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a1c9c985e481bd9999cd95d60aa1b6064820152608481fd5b60006001600160401b038211156105c1576105c1610490565b5060051b60200190565b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a727261792073747269646560a81b6064820152608481fd5b6000604080838503121561063a5761063a61043f565b6106426104a6565b9150823560ff8116811461065557600080fd5b82526020838101356001600160401b0380821115610675576106756104fe565b8186019150601f878184011261068d5761068d61054f565b82356106a061069b826105a8565b6104ce565b81815260059190911b8401850190858101908a8311156106c2576106c26105cb565b8686015b8381101561079d578035868111156106e0576106e061054f565b8701603f81018d136106f4576106f461054f565b888101358781111561070857610708610490565b610719818801601f19168b016104ce565b8181528e8c83850101111561077c578b5162461bcd60e51b8152600481018c9052602760248201527f414249206465636f64696e673a20696e76616c69642062797465206172726179604482015266040d8cadccee8d60cb1b6064820152608481fd5b818c84018c83013760009181018b01919091528452509187019187016106c6565b5080878a0152505050505050505092915050565b80356001600160401b03811681146107c857600080fd5b919050565b600080600080600060a086880312156107e8576107e861039f565b85356001600160401b0380821115610802576108026103ef565b61080e89838a01610624565b965060208801359550604088013594506060880135915080821115610835576108356103ef565b5061084288828901610624565b925050610851608087016107b1565b90509295509295909350565b80356001600160a01b03811681146107c857600080fd5b600080600080600060a0868803121561088f5761088f61039f565b6108988661085d565b9450602086013593506040860135925060608601356001600160401b038111156108c4576108c46103ef565b61084288828901610624565b803563ffffffff811681146107c857600080fd5b600080600080608085870312156108fd576108fd61039f565b6001600160401b038086351115610916576109166103ef565b8535860187601f82011261092c5761092c61054f565b61093961069b82356105a8565b81358082526020808301929160051b8401018a81111561095b5761095b6105cb565b602084015b818110156109e05785813511156109795761097961054f565b803585016040818e03601f190112156109945761099461043f565b61099c6104a6565b6020820135888111156109b1576109b16104fe565b6109c08f602083860101610624565b825250604091909101356020808301919091529085529384019301610960565b50508097505050506109f4602087016108d0565b9350604086013581811115610a0b57610a0b6103ef565b610a1788828901610624565b93505050610a27606086016107b1565b905092959194509250565b60008060008060808587031215610a4b57610a4b61039f565b84356001600160401b0380821115610a6557610a656103ef565b818701915087601f830112610a7c57610a7c61054f565b81356020610a8c61069b836105a8565b82815260069290921b8401810191818101908b841115610aae57610aae6105cb565b948201945b83861015610afa576040868d031215610ace57610ace61043f565b610ad66104a6565b610adf8761085d565b81528684013584820152825260409095019490820190610ab3565b9850610b0990508982016108d0565b965050506040870135915080821115610b2457610b246103ef565b50610b3187828801610624565b925050610a27606086016107b1565b60008060008060808587031215610b5957610b5961039f565b84356001600160401b0380821115610b7357610b736103ef565b610b7f88838901610624565b9550602087013594506040870135915080821115610b2457610b246103ef565b60008060008060808587031215610bb857610bb861039f565b610bc18561085d565b93506020850135925060408501356001600160401b03811115610be657610be66103ef565b610b3187828801610624565b60006040830160ff835116845260208084015160408287015282815180855260608801915060608160051b890101945083830192506000805b82811015610c8757898703605f1901845284518051808952835b81811015610c60578281018901518a82018a01528801610c45565b508881018801849052601f01601f1916909701860196509385019392850192600101610c2b565b509498975050505050505050565b60a081526000610ca860a0830188610bf2565b8660208401528560408401528281036060840152610cc68186610bf2565b9150506001600160401b03831660808301529695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000610d0f60a0830185610bf2565b90506001600160401b03831660808301529695505050505050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b83811015610d9757609f19888703018552815160408151818952610d79828a0182610bf2565b92860151988601989098525095509382019390820190600101610d53565b505063ffffffff89169086015250508281036040840152610db88186610bf2565b915050610dd060608301846001600160401b03169052565b95945050505050565b6080808252855190820181905260009060209060a0840190828901845b82811015610e2657815180516001600160a01b031685528501518585015260409093019290840190600101610df6565b50505063ffffffff8716828501528381036040850152610e468187610bf2565b925050506001600160401b038316606083015295945050505050565b608081526000610e756080830187610bf2565b8560208401528281036040840152610e8d8186610bf2565b9150506001600160401b038316606083015295945050505050565b60018060a01b0385168152836020820152608060408201526000610ecf6080830185610bf2565b90506001600160401b03831660608301529594505050505056fea264697066735822122075f5e5c3b6cc37a9c35ed64b92d75971c7fccfd27ecc159ed21810a49ab50c0864736f6c63430008130033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45746865722073656E7420746F206E6F6E2D70617961626C652066756E637469 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x37B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP PUSH2 0xF1F DUP1 PUSH2 0x6D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45746865722073656E7420746F206E6F6E2D70617961626C652066756E637469 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x37B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150C016A EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x3E506EF0 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x797B45FD EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xAB946323 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0xB4F76F96 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x175 JUMPI JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420646F6573206E6F7420686176652066616C6C6261636B20 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH21 0x6E6F7220726563656976652066756E6374696F6E73 PUSH1 0x58 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST PUSH2 0x127 PUSH2 0x122 CALLDATASIZE PUSH1 0x4 PUSH2 0x7CD JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x874 JUMP JUMPDEST PUSH2 0x23E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0x8E4 JUMP JUMPDEST PUSH2 0x26B JUMP JUMPDEST PUSH2 0x127 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xA32 JUMP JUMPDEST PUSH2 0x31E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0xB40 JUMP JUMPDEST PUSH2 0x349 JUMP JUMPDEST PUSH2 0x127 PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0xB9F JUMP JUMPDEST PUSH2 0x374 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA8600B5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x150C016A SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x233 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E506EF PUSH1 0xE4 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x3E506EF0 SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xCE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x797B45FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x797B45FD SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x300 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x314 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAB946323 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xAB946323 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xDD9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5A7BB7CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB4F76F96 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB9F813FF PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB9F813FF SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xEA8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A207475706C65206461746120746F6F2073686F PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x1C9D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C6964207475706C65206F666673 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20737472756374206461746120746F6F207368 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1BDC9D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4C8 JUMPI PUSH2 0x4C8 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F6 JUMPI PUSH2 0x4F6 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C696420737472756374206F6666 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1CD95D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1C9C985E481BD9999CD95D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x5C1 JUMPI PUSH2 0x5C1 PUSH2 0x490 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x7272617920737472696465 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x63A JUMPI PUSH2 0x63A PUSH2 0x43F JUMP JUMPDEST PUSH2 0x642 PUSH2 0x4A6 JUMP JUMPDEST SWAP2 POP DUP3 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x675 JUMPI PUSH2 0x675 PUSH2 0x4FE JUMP JUMPDEST DUP2 DUP7 ADD SWAP2 POP PUSH1 0x1F DUP8 DUP2 DUP5 ADD SLT PUSH2 0x68D JUMPI PUSH2 0x68D PUSH2 0x54F JUMP JUMPDEST DUP3 CALLDATALOAD PUSH2 0x6A0 PUSH2 0x69B DUP3 PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP5 ADD DUP6 ADD SWAP1 DUP6 DUP2 ADD SWAP1 DUP11 DUP4 GT ISZERO PUSH2 0x6C2 JUMPI PUSH2 0x6C2 PUSH2 0x5CB JUMP JUMPDEST DUP7 DUP7 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x79D JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x6E0 JUMPI PUSH2 0x6E0 PUSH2 0x54F JUMP JUMPDEST DUP8 ADD PUSH1 0x3F DUP2 ADD DUP14 SGT PUSH2 0x6F4 JUMPI PUSH2 0x6F4 PUSH2 0x54F JUMP JUMPDEST DUP9 DUP2 ADD CALLDATALOAD DUP8 DUP2 GT ISZERO PUSH2 0x708 JUMPI PUSH2 0x708 PUSH2 0x490 JUMP JUMPDEST PUSH2 0x719 DUP2 DUP9 ADD PUSH1 0x1F NOT AND DUP12 ADD PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE DUP15 DUP13 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x77C JUMPI DUP12 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642062797465206172726179 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x40D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST DUP2 DUP13 DUP5 ADD DUP13 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MSTORE POP SWAP2 DUP8 ADD SWAP2 DUP8 ADD PUSH2 0x6C6 JUMP JUMPDEST POP DUP1 DUP8 DUP11 ADD MSTORE POP POP POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7E8 JUMPI PUSH2 0x7E8 PUSH2 0x39F JUMP JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH2 0x802 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x80E DUP10 DUP4 DUP11 ADD PUSH2 0x624 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x835 JUMPI PUSH2 0x835 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x851 PUSH1 0x80 DUP8 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x88F JUMPI PUSH2 0x88F PUSH2 0x39F JUMP JUMPDEST PUSH2 0x898 DUP7 PUSH2 0x85D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x8C4 JUMPI PUSH2 0x8C4 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x8FD JUMPI PUSH2 0x8FD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP7 CALLDATALOAD GT ISZERO PUSH2 0x916 JUMPI PUSH2 0x916 PUSH2 0x3EF JUMP JUMPDEST DUP6 CALLDATALOAD DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x92C JUMPI PUSH2 0x92C PUSH2 0x54F JUMP JUMPDEST PUSH2 0x939 PUSH2 0x69B DUP3 CALLDATALOAD PUSH2 0x5A8 JUMP JUMPDEST DUP2 CALLDATALOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 SWAP2 PUSH1 0x5 SHL DUP5 ADD ADD DUP11 DUP2 GT ISZERO PUSH2 0x95B JUMPI PUSH2 0x95B PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E0 JUMPI DUP6 DUP2 CALLDATALOAD GT ISZERO PUSH2 0x979 JUMPI PUSH2 0x979 PUSH2 0x54F JUMP JUMPDEST DUP1 CALLDATALOAD DUP6 ADD PUSH1 0x40 DUP2 DUP15 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH2 0x994 JUMPI PUSH2 0x994 PUSH2 0x43F JUMP JUMPDEST PUSH2 0x99C PUSH2 0x4A6 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP9 DUP2 GT ISZERO PUSH2 0x9B1 JUMPI PUSH2 0x9B1 PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x9C0 DUP16 PUSH1 0x20 DUP4 DUP7 ADD ADD PUSH2 0x624 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x960 JUMP JUMPDEST POP POP DUP1 SWAP8 POP POP POP POP PUSH2 0x9F4 PUSH1 0x20 DUP8 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xA17 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP4 POP POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xA4B JUMPI PUSH2 0xA4B PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xA65 JUMPI PUSH2 0xA65 PUSH2 0x3EF JUMP JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0x54F JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0xA8C PUSH2 0x69B DUP4 PUSH2 0x5A8 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x6 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP12 DUP5 GT ISZERO PUSH2 0xAAE JUMPI PUSH2 0xAAE PUSH2 0x5CB JUMP JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0xAFA JUMPI PUSH1 0x40 DUP7 DUP14 SUB SLT ISZERO PUSH2 0xACE JUMPI PUSH2 0xACE PUSH2 0x43F JUMP JUMPDEST PUSH2 0xAD6 PUSH2 0x4A6 JUMP JUMPDEST PUSH2 0xADF DUP8 PUSH2 0x85D JUMP JUMPDEST DUP2 MSTORE DUP7 DUP5 ADD CALLDATALOAD DUP5 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP6 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0xAB3 JUMP JUMPDEST SWAP9 POP PUSH2 0xB09 SWAP1 POP DUP10 DUP3 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP7 POP POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB59 JUMPI PUSH2 0xB59 PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xB73 JUMPI PUSH2 0xB73 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB7F DUP9 DUP4 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBB8 JUMPI PUSH2 0xBB8 PUSH2 0x39F JUMP JUMPDEST PUSH2 0xBC1 DUP6 PUSH2 0x85D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xBE6 JUMPI PUSH2 0xBE6 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0xFF DUP4 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP3 DUP8 ADD MSTORE DUP3 DUP2 MLOAD DUP1 DUP6 MSTORE PUSH1 0x60 DUP9 ADD SWAP2 POP PUSH1 0x60 DUP2 PUSH1 0x5 SHL DUP10 ADD ADD SWAP5 POP DUP4 DUP4 ADD SWAP3 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xC87 JUMPI DUP10 DUP8 SUB PUSH1 0x5F NOT ADD DUP5 MSTORE DUP5 MLOAD DUP1 MLOAD DUP1 DUP10 MSTORE DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC60 JUMPI DUP3 DUP2 ADD DUP10 ADD MLOAD DUP11 DUP3 ADD DUP11 ADD MSTORE DUP9 ADD PUSH2 0xC45 JUMP JUMPDEST POP DUP9 DUP2 ADD DUP9 ADD DUP5 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 SWAP8 ADD DUP7 ADD SWAP7 POP SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xC2B JUMP JUMPDEST POP SWAP5 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA0 DUP2 MSTORE PUSH1 0x0 PUSH2 0xCA8 PUSH1 0xA0 DUP4 ADD DUP9 PUSH2 0xBF2 JUMP JUMPDEST DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0xCC6 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xD0F PUSH1 0xA0 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD PUSH1 0x80 DUP4 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 POP PUSH1 0xA0 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP1 DUP11 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD97 JUMPI PUSH1 0x9F NOT DUP9 DUP8 SUB ADD DUP6 MSTORE DUP2 MLOAD PUSH1 0x40 DUP2 MLOAD DUP2 DUP10 MSTORE PUSH2 0xD79 DUP3 DUP11 ADD DUP3 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 DUP7 ADD MLOAD SWAP9 DUP7 ADD SWAP9 SWAP1 SWAP9 MSTORE POP SWAP6 POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xD53 JUMP JUMPDEST POP POP PUSH4 0xFFFFFFFF DUP10 AND SWAP1 DUP7 ADD MSTORE POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xDB8 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xDD0 PUSH1 0x60 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP1 DUP3 MSTORE DUP6 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xA0 DUP5 ADD SWAP1 DUP3 DUP10 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xE26 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP6 ADD MLOAD DUP6 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xDF6 JUMP JUMPDEST POP POP POP PUSH4 0xFFFFFFFF DUP8 AND DUP3 DUP6 ADD MSTORE DUP4 DUP2 SUB PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xE46 DUP2 DUP8 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE75 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0xBF2 JUMP JUMPDEST DUP6 PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xE8D DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xECF PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH22 0xF5E5C3B6CC37A9C35ED64B92D75971C7FCCFD27ECC15 SWAP15 0xD2 XOR LT LOG4 SWAP11 0xB5 0xC ADDMOD PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", "sourceMap": "119:1996:0:-:0;;;;;;;;;;-1:-1:-1;;;119:1996:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;119:1996:0;;;;;;;;;;;;;;;" }, "deployedBytecode": { @@ -14146,8 +14150,8 @@ ], "immutableReferences": {}, "linkReferences": {}, - "object": "608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50600436106100af5760003560e01c8063150c016a146101145780633e506ef014610129578063797b45fd1461013c578063ab9463231461014f578063b4f76f9614610162578063b9f813ff14610175575b60405162461bcd60e51b815260206004820152603560248201527f436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b2060448201908152746e6f7220726563656976652066756e6374696f6e7360581b6064830152608482fd5b6101276101223660046107cd565b610188565b005b610127610137366004610874565b61023e565b61012761014a3660046108e4565b61026b565b61012761015d366004610a32565b61031e565b610127610170366004610b40565b610349565b610127610183366004610b9f565b610374565b604051630a8600b560e11b81526108049063150c016a906101b59088908890889088908890600401610c95565b600060405180830381600087803b15801561021f5760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610233573d6000803e3d6000fd5b505050505050505050565b6040516303e506ef60e41b815261080490633e506ef0906101b59088908890889088908890600401610ce2565b60405163797b45fd60e01b81526108049063797b45fd90610296908790879087908790600401610d2a565b600060405180830381600087803b1580156103005760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610314573d6000803e3d6000fd5b5050505050505050565b60405163ab94632360e01b81526108049063ab94632390610296908790879087908790600401610dd9565b604051635a7bb7cb60e11b81526108049063b4f76f9690610296908790879087908790600401610e62565b60405163b9f813ff60e01b81526108049063b9f813ff90610296908790879087908790600401610ea8565b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a207475706c65206461746120746f6f2073686f6044820152611c9d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a20696e76616c6964207475706c65206f666673604482015261195d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20737472756374206461746120746f6f2073686044820152621bdc9d60ea1b6064820152608481fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104c8576104c8610490565b60405290565b604051601f8201601f191681016001600160401b03811182821017156104f6576104f6610490565b604052919050565b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20696e76616c696420737472756374206f66666044820152621cd95d60ea1b6064820152608481fd5b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a1c9c985e481bd9999cd95d60aa1b6064820152608481fd5b60006001600160401b038211156105c1576105c1610490565b5060051b60200190565b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a727261792073747269646560a81b6064820152608481fd5b6000604080838503121561063a5761063a61043f565b6106426104a6565b9150823560ff8116811461065557600080fd5b82526020838101356001600160401b0380821115610675576106756104fe565b8186019150601f878184011261068d5761068d61054f565b82356106a061069b826105a8565b6104ce565b81815260059190911b8401850190858101908a8311156106c2576106c26105cb565b8686015b8381101561079d578035868111156106e0576106e061054f565b8701603f81018d136106f4576106f461054f565b888101358781111561070857610708610490565b610719818801601f19168b016104ce565b8181528e8c83850101111561077c578b5162461bcd60e51b8152600481018c9052602760248201527f414249206465636f64696e673a20696e76616c69642062797465206172726179604482015266040d8cadccee8d60cb1b6064820152608481fd5b818c84018c83013760009181018b01919091528452509187019187016106c6565b5080878a0152505050505050505092915050565b80356001600160401b03811681146107c857600080fd5b919050565b600080600080600060a086880312156107e8576107e861039f565b85356001600160401b0380821115610802576108026103ef565b61080e89838a01610624565b965060208801359550604088013594506060880135915080821115610835576108356103ef565b5061084288828901610624565b925050610851608087016107b1565b90509295509295909350565b80356001600160a01b03811681146107c857600080fd5b600080600080600060a0868803121561088f5761088f61039f565b6108988661085d565b9450602086013593506040860135925060608601356001600160401b038111156108c4576108c46103ef565b61084288828901610624565b803563ffffffff811681146107c857600080fd5b600080600080608085870312156108fd576108fd61039f565b6001600160401b038086351115610916576109166103ef565b8535860187601f82011261092c5761092c61054f565b61093961069b82356105a8565b81358082526020808301929160051b8401018a81111561095b5761095b6105cb565b602084015b818110156109e05785813511156109795761097961054f565b803585016040818e03601f190112156109945761099461043f565b61099c6104a6565b6020820135888111156109b1576109b16104fe565b6109c08f602083860101610624565b825250604091909101356020808301919091529085529384019301610960565b50508097505050506109f4602087016108d0565b9350604086013581811115610a0b57610a0b6103ef565b610a1788828901610624565b93505050610a27606086016107b1565b905092959194509250565b60008060008060808587031215610a4b57610a4b61039f565b84356001600160401b0380821115610a6557610a656103ef565b818701915087601f830112610a7c57610a7c61054f565b81356020610a8c61069b836105a8565b82815260069290921b8401810191818101908b841115610aae57610aae6105cb565b948201945b83861015610afa576040868d031215610ace57610ace61043f565b610ad66104a6565b610adf8761085d565b81528684013584820152825260409095019490820190610ab3565b9850610b0990508982016108d0565b965050506040870135915080821115610b2457610b246103ef565b50610b3187828801610624565b925050610a27606086016107b1565b60008060008060808587031215610b5957610b5961039f565b84356001600160401b0380821115610b7357610b736103ef565b610b7f88838901610624565b9550602087013594506040870135915080821115610b2457610b246103ef565b60008060008060808587031215610bb857610bb861039f565b610bc18561085d565b93506020850135925060408501356001600160401b03811115610be657610be66103ef565b610b3187828801610624565b60006040830160ff835116845260208084015160408287015282815180855260608801915060608160051b890101945083830192506000805b82811015610c8757898703605f1901845284518051808952835b81811015610c60578281018901518a82018a01528801610c45565b508881018801849052601f01601f1916909701860196509385019392850192600101610c2b565b509498975050505050505050565b60a081526000610ca860a0830188610bf2565b8660208401528560408401528281036060840152610cc68186610bf2565b9150506001600160401b03831660808301529695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000610d0f60a0830185610bf2565b90506001600160401b03831660808301529695505050505050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b83811015610d9757609f19888703018552815160408151818952610d79828a0182610bf2565b92860151988601989098525095509382019390820190600101610d53565b505063ffffffff89169086015250508281036040840152610db88186610bf2565b915050610dd060608301846001600160401b03169052565b95945050505050565b6080808252855190820181905260009060209060a0840190828901845b82811015610e2657815180516001600160a01b031685528501518585015260409093019290840190600101610df6565b50505063ffffffff8716828501528381036040850152610e468187610bf2565b925050506001600160401b038316606083015295945050505050565b608081526000610e756080830187610bf2565b8560208401528281036040840152610e8d8186610bf2565b9150506001600160401b038316606083015295945050505050565b60018060a01b0385168152836020820152608060408201526000610ecf6080830185610bf2565b90506001600160401b03831660608301529594505050505056fea26469706673582212202085c2310b813aa1a9795bbb224210110ff7fcebe903592aa6e53d5dd059fe5964736f6c63430008130033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45746865722073656E7420746F206E6F6E2D70617961626C652066756E637469 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x37B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150C016A EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x3E506EF0 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x797B45FD EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xAB946323 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0xB4F76F96 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x175 JUMPI JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420646F6573206E6F7420686176652066616C6C6261636B20 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH21 0x6E6F7220726563656976652066756E6374696F6E73 PUSH1 0x58 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST PUSH2 0x127 PUSH2 0x122 CALLDATASIZE PUSH1 0x4 PUSH2 0x7CD JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x874 JUMP JUMPDEST PUSH2 0x23E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0x8E4 JUMP JUMPDEST PUSH2 0x26B JUMP JUMPDEST PUSH2 0x127 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xA32 JUMP JUMPDEST PUSH2 0x31E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0xB40 JUMP JUMPDEST PUSH2 0x349 JUMP JUMPDEST PUSH2 0x127 PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0xB9F JUMP JUMPDEST PUSH2 0x374 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA8600B5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x150C016A SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x233 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E506EF PUSH1 0xE4 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x3E506EF0 SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xCE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x797B45FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x797B45FD SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x300 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x314 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAB946323 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xAB946323 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xDD9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5A7BB7CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB4F76F96 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB9F813FF PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB9F813FF SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xEA8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A207475706C65206461746120746F6F2073686F PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x1C9D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C6964207475706C65206F666673 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20737472756374206461746120746F6F207368 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1BDC9D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4C8 JUMPI PUSH2 0x4C8 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F6 JUMPI PUSH2 0x4F6 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C696420737472756374206F6666 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1CD95D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1C9C985E481BD9999CD95D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x5C1 JUMPI PUSH2 0x5C1 PUSH2 0x490 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x7272617920737472696465 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x63A JUMPI PUSH2 0x63A PUSH2 0x43F JUMP JUMPDEST PUSH2 0x642 PUSH2 0x4A6 JUMP JUMPDEST SWAP2 POP DUP3 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x675 JUMPI PUSH2 0x675 PUSH2 0x4FE JUMP JUMPDEST DUP2 DUP7 ADD SWAP2 POP PUSH1 0x1F DUP8 DUP2 DUP5 ADD SLT PUSH2 0x68D JUMPI PUSH2 0x68D PUSH2 0x54F JUMP JUMPDEST DUP3 CALLDATALOAD PUSH2 0x6A0 PUSH2 0x69B DUP3 PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP5 ADD DUP6 ADD SWAP1 DUP6 DUP2 ADD SWAP1 DUP11 DUP4 GT ISZERO PUSH2 0x6C2 JUMPI PUSH2 0x6C2 PUSH2 0x5CB JUMP JUMPDEST DUP7 DUP7 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x79D JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x6E0 JUMPI PUSH2 0x6E0 PUSH2 0x54F JUMP JUMPDEST DUP8 ADD PUSH1 0x3F DUP2 ADD DUP14 SGT PUSH2 0x6F4 JUMPI PUSH2 0x6F4 PUSH2 0x54F JUMP JUMPDEST DUP9 DUP2 ADD CALLDATALOAD DUP8 DUP2 GT ISZERO PUSH2 0x708 JUMPI PUSH2 0x708 PUSH2 0x490 JUMP JUMPDEST PUSH2 0x719 DUP2 DUP9 ADD PUSH1 0x1F NOT AND DUP12 ADD PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE DUP15 DUP13 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x77C JUMPI DUP12 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642062797465206172726179 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x40D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST DUP2 DUP13 DUP5 ADD DUP13 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MSTORE POP SWAP2 DUP8 ADD SWAP2 DUP8 ADD PUSH2 0x6C6 JUMP JUMPDEST POP DUP1 DUP8 DUP11 ADD MSTORE POP POP POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7E8 JUMPI PUSH2 0x7E8 PUSH2 0x39F JUMP JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH2 0x802 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x80E DUP10 DUP4 DUP11 ADD PUSH2 0x624 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x835 JUMPI PUSH2 0x835 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x851 PUSH1 0x80 DUP8 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x88F JUMPI PUSH2 0x88F PUSH2 0x39F JUMP JUMPDEST PUSH2 0x898 DUP7 PUSH2 0x85D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x8C4 JUMPI PUSH2 0x8C4 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x8FD JUMPI PUSH2 0x8FD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP7 CALLDATALOAD GT ISZERO PUSH2 0x916 JUMPI PUSH2 0x916 PUSH2 0x3EF JUMP JUMPDEST DUP6 CALLDATALOAD DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x92C JUMPI PUSH2 0x92C PUSH2 0x54F JUMP JUMPDEST PUSH2 0x939 PUSH2 0x69B DUP3 CALLDATALOAD PUSH2 0x5A8 JUMP JUMPDEST DUP2 CALLDATALOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 SWAP2 PUSH1 0x5 SHL DUP5 ADD ADD DUP11 DUP2 GT ISZERO PUSH2 0x95B JUMPI PUSH2 0x95B PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E0 JUMPI DUP6 DUP2 CALLDATALOAD GT ISZERO PUSH2 0x979 JUMPI PUSH2 0x979 PUSH2 0x54F JUMP JUMPDEST DUP1 CALLDATALOAD DUP6 ADD PUSH1 0x40 DUP2 DUP15 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH2 0x994 JUMPI PUSH2 0x994 PUSH2 0x43F JUMP JUMPDEST PUSH2 0x99C PUSH2 0x4A6 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP9 DUP2 GT ISZERO PUSH2 0x9B1 JUMPI PUSH2 0x9B1 PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x9C0 DUP16 PUSH1 0x20 DUP4 DUP7 ADD ADD PUSH2 0x624 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x960 JUMP JUMPDEST POP POP DUP1 SWAP8 POP POP POP POP PUSH2 0x9F4 PUSH1 0x20 DUP8 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xA17 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP4 POP POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xA4B JUMPI PUSH2 0xA4B PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xA65 JUMPI PUSH2 0xA65 PUSH2 0x3EF JUMP JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0x54F JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0xA8C PUSH2 0x69B DUP4 PUSH2 0x5A8 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x6 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP12 DUP5 GT ISZERO PUSH2 0xAAE JUMPI PUSH2 0xAAE PUSH2 0x5CB JUMP JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0xAFA JUMPI PUSH1 0x40 DUP7 DUP14 SUB SLT ISZERO PUSH2 0xACE JUMPI PUSH2 0xACE PUSH2 0x43F JUMP JUMPDEST PUSH2 0xAD6 PUSH2 0x4A6 JUMP JUMPDEST PUSH2 0xADF DUP8 PUSH2 0x85D JUMP JUMPDEST DUP2 MSTORE DUP7 DUP5 ADD CALLDATALOAD DUP5 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP6 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0xAB3 JUMP JUMPDEST SWAP9 POP PUSH2 0xB09 SWAP1 POP DUP10 DUP3 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP7 POP POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB59 JUMPI PUSH2 0xB59 PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xB73 JUMPI PUSH2 0xB73 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB7F DUP9 DUP4 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBB8 JUMPI PUSH2 0xBB8 PUSH2 0x39F JUMP JUMPDEST PUSH2 0xBC1 DUP6 PUSH2 0x85D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xBE6 JUMPI PUSH2 0xBE6 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0xFF DUP4 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP3 DUP8 ADD MSTORE DUP3 DUP2 MLOAD DUP1 DUP6 MSTORE PUSH1 0x60 DUP9 ADD SWAP2 POP PUSH1 0x60 DUP2 PUSH1 0x5 SHL DUP10 ADD ADD SWAP5 POP DUP4 DUP4 ADD SWAP3 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xC87 JUMPI DUP10 DUP8 SUB PUSH1 0x5F NOT ADD DUP5 MSTORE DUP5 MLOAD DUP1 MLOAD DUP1 DUP10 MSTORE DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC60 JUMPI DUP3 DUP2 ADD DUP10 ADD MLOAD DUP11 DUP3 ADD DUP11 ADD MSTORE DUP9 ADD PUSH2 0xC45 JUMP JUMPDEST POP DUP9 DUP2 ADD DUP9 ADD DUP5 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 SWAP8 ADD DUP7 ADD SWAP7 POP SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xC2B JUMP JUMPDEST POP SWAP5 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA0 DUP2 MSTORE PUSH1 0x0 PUSH2 0xCA8 PUSH1 0xA0 DUP4 ADD DUP9 PUSH2 0xBF2 JUMP JUMPDEST DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0xCC6 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xD0F PUSH1 0xA0 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD PUSH1 0x80 DUP4 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 POP PUSH1 0xA0 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP1 DUP11 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD97 JUMPI PUSH1 0x9F NOT DUP9 DUP8 SUB ADD DUP6 MSTORE DUP2 MLOAD PUSH1 0x40 DUP2 MLOAD DUP2 DUP10 MSTORE PUSH2 0xD79 DUP3 DUP11 ADD DUP3 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 DUP7 ADD MLOAD SWAP9 DUP7 ADD SWAP9 SWAP1 SWAP9 MSTORE POP SWAP6 POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xD53 JUMP JUMPDEST POP POP PUSH4 0xFFFFFFFF DUP10 AND SWAP1 DUP7 ADD MSTORE POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xDB8 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xDD0 PUSH1 0x60 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP1 DUP3 MSTORE DUP6 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xA0 DUP5 ADD SWAP1 DUP3 DUP10 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xE26 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP6 ADD MLOAD DUP6 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xDF6 JUMP JUMPDEST POP POP POP PUSH4 0xFFFFFFFF DUP8 AND DUP3 DUP6 ADD MSTORE DUP4 DUP2 SUB PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xE46 DUP2 DUP8 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE75 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0xBF2 JUMP JUMPDEST DUP6 PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xE8D DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xECF PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 DUP6 0xC2 BALANCE SIGNEXTEND DUP2 GASPRICE LOG1 0xA9 PUSH26 0x5BBB224210110FF7FCEBE903592AA6E53D5DD059FE5964736F6C PUSH4 0x43000813 STOP CALLER ", + "object": "608060405234801561005d5760405162461bcd60e51b815260206004820152602260248201527f45746865722073656e7420746f206e6f6e2d70617961626c652066756e637469604482019081526137b760f11b6064830152608482fd5b50600436106100af5760003560e01c8063150c016a146101145780633e506ef014610129578063797b45fd1461013c578063ab9463231461014f578063b4f76f9614610162578063b9f813ff14610175575b60405162461bcd60e51b815260206004820152603560248201527f436f6e747261637420646f6573206e6f7420686176652066616c6c6261636b2060448201908152746e6f7220726563656976652066756e6374696f6e7360581b6064830152608482fd5b6101276101223660046107cd565b610188565b005b610127610137366004610874565b61023e565b61012761014a3660046108e4565b61026b565b61012761015d366004610a32565b61031e565b610127610170366004610b40565b610349565b610127610183366004610b9f565b610374565b604051630a8600b560e11b81526108049063150c016a906101b59088908890889088908890600401610c95565b600060405180830381600087803b15801561021f5760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610233573d6000803e3d6000fd5b505050505050505050565b6040516303e506ef60e41b815261080490633e506ef0906101b59088908890889088908890600401610ce2565b60405163797b45fd60e01b81526108049063797b45fd90610296908790879087908790600401610d2a565b600060405180830381600087803b1580156103005760405162461bcd60e51b815260206004820152602560248201527f54617267657420636f6e747261637420646f6573206e6f7420636f6e7461696e604482019081526420636f646560d81b6064830152608482fd5b505af1158015610314573d6000803e3d6000fd5b5050505050505050565b60405163ab94632360e01b81526108049063ab94632390610296908790879087908790600401610dd9565b604051635a7bb7cb60e11b81526108049063b4f76f9690610296908790879087908790600401610e62565b60405163b9f813ff60e01b81526108049063b9f813ff90610296908790879087908790600401610ea8565b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a207475706c65206461746120746f6f2073686f6044820152611c9d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602260248201527f414249206465636f64696e673a20696e76616c6964207475706c65206f666673604482015261195d60f21b6064820152608481fd5b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20737472756374206461746120746f6f2073686044820152621bdc9d60ea1b6064820152608481fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156104c8576104c8610490565b60405290565b604051601f8201601f191681016001600160401b03811182821017156104f6576104f6610490565b604052919050565b60405162461bcd60e51b815260206004820152602360248201527f414249206465636f64696e673a20696e76616c696420737472756374206f66666044820152621cd95d60ea1b6064820152608481fd5b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a1c9c985e481bd9999cd95d60aa1b6064820152608481fd5b60006001600160401b038211156105c1576105c1610490565b5060051b60200190565b60405162461bcd60e51b815260206004820152602b60248201527f414249206465636f64696e673a20696e76616c69642063616c6c64617461206160448201526a727261792073747269646560a81b6064820152608481fd5b6000604080838503121561063a5761063a61043f565b6106426104a6565b9150823560ff8116811461065557600080fd5b82526020838101356001600160401b0380821115610675576106756104fe565b8186019150601f878184011261068d5761068d61054f565b82356106a061069b826105a8565b6104ce565b81815260059190911b8401850190858101908a8311156106c2576106c26105cb565b8686015b8381101561079d578035868111156106e0576106e061054f565b8701603f81018d136106f4576106f461054f565b888101358781111561070857610708610490565b610719818801601f19168b016104ce565b8181528e8c83850101111561077c578b5162461bcd60e51b8152600481018c9052602760248201527f414249206465636f64696e673a20696e76616c69642062797465206172726179604482015266040d8cadccee8d60cb1b6064820152608481fd5b818c84018c83013760009181018b01919091528452509187019187016106c6565b5080878a0152505050505050505092915050565b80356001600160401b03811681146107c857600080fd5b919050565b600080600080600060a086880312156107e8576107e861039f565b85356001600160401b0380821115610802576108026103ef565b61080e89838a01610624565b965060208801359550604088013594506060880135915080821115610835576108356103ef565b5061084288828901610624565b925050610851608087016107b1565b90509295509295909350565b80356001600160a01b03811681146107c857600080fd5b600080600080600060a0868803121561088f5761088f61039f565b6108988661085d565b9450602086013593506040860135925060608601356001600160401b038111156108c4576108c46103ef565b61084288828901610624565b803563ffffffff811681146107c857600080fd5b600080600080608085870312156108fd576108fd61039f565b6001600160401b038086351115610916576109166103ef565b8535860187601f82011261092c5761092c61054f565b61093961069b82356105a8565b81358082526020808301929160051b8401018a81111561095b5761095b6105cb565b602084015b818110156109e05785813511156109795761097961054f565b803585016040818e03601f190112156109945761099461043f565b61099c6104a6565b6020820135888111156109b1576109b16104fe565b6109c08f602083860101610624565b825250604091909101356020808301919091529085529384019301610960565b50508097505050506109f4602087016108d0565b9350604086013581811115610a0b57610a0b6103ef565b610a1788828901610624565b93505050610a27606086016107b1565b905092959194509250565b60008060008060808587031215610a4b57610a4b61039f565b84356001600160401b0380821115610a6557610a656103ef565b818701915087601f830112610a7c57610a7c61054f565b81356020610a8c61069b836105a8565b82815260069290921b8401810191818101908b841115610aae57610aae6105cb565b948201945b83861015610afa576040868d031215610ace57610ace61043f565b610ad66104a6565b610adf8761085d565b81528684013584820152825260409095019490820190610ab3565b9850610b0990508982016108d0565b965050506040870135915080821115610b2457610b246103ef565b50610b3187828801610624565b925050610a27606086016107b1565b60008060008060808587031215610b5957610b5961039f565b84356001600160401b0380821115610b7357610b736103ef565b610b7f88838901610624565b9550602087013594506040870135915080821115610b2457610b246103ef565b60008060008060808587031215610bb857610bb861039f565b610bc18561085d565b93506020850135925060408501356001600160401b03811115610be657610be66103ef565b610b3187828801610624565b60006040830160ff835116845260208084015160408287015282815180855260608801915060608160051b890101945083830192506000805b82811015610c8757898703605f1901845284518051808952835b81811015610c60578281018901518a82018a01528801610c45565b508881018801849052601f01601f1916909701860196509385019392850192600101610c2b565b509498975050505050505050565b60a081526000610ca860a0830188610bf2565b8660208401528560408401528281036060840152610cc68186610bf2565b9150506001600160401b03831660808301529695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000610d0f60a0830185610bf2565b90506001600160401b03831660808301529695505050505050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b83811015610d9757609f19888703018552815160408151818952610d79828a0182610bf2565b92860151988601989098525095509382019390820190600101610d53565b505063ffffffff89169086015250508281036040840152610db88186610bf2565b915050610dd060608301846001600160401b03169052565b95945050505050565b6080808252855190820181905260009060209060a0840190828901845b82811015610e2657815180516001600160a01b031685528501518585015260409093019290840190600101610df6565b50505063ffffffff8716828501528381036040850152610e468187610bf2565b925050506001600160401b038316606083015295945050505050565b608081526000610e756080830187610bf2565b8560208401528281036040840152610e8d8186610bf2565b9150506001600160401b038316606083015295945050505050565b60018060a01b0385168152836020820152608060408201526000610ecf6080830185610bf2565b90506001600160401b03831660608301529594505050505056fea264697066735822122075f5e5c3b6cc37a9c35ed64b92d75971c7fccfd27ecc159ed21810a49ab50c0864736f6c63430008130033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45746865722073656E7420746F206E6F6E2D70617961626C652066756E637469 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x37B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150C016A EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x3E506EF0 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x797B45FD EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xAB946323 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0xB4F76F96 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x175 JUMPI JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420646F6573206E6F7420686176652066616C6C6261636B20 PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH21 0x6E6F7220726563656976652066756E6374696F6E73 PUSH1 0x58 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST PUSH2 0x127 PUSH2 0x122 CALLDATASIZE PUSH1 0x4 PUSH2 0x7CD JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x874 JUMP JUMPDEST PUSH2 0x23E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0x8E4 JUMP JUMPDEST PUSH2 0x26B JUMP JUMPDEST PUSH2 0x127 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xA32 JUMP JUMPDEST PUSH2 0x31E JUMP JUMPDEST PUSH2 0x127 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0xB40 JUMP JUMPDEST PUSH2 0x349 JUMP JUMPDEST PUSH2 0x127 PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0xB9F JUMP JUMPDEST PUSH2 0x374 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA8600B5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x150C016A SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x233 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E506EF PUSH1 0xE4 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x3E506EF0 SWAP1 PUSH2 0x1B5 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xCE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x797B45FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0x797B45FD SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x300 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54617267657420636F6E747261637420646F6573206E6F7420636F6E7461696E PUSH1 0x44 DUP3 ADD SWAP1 DUP2 MSTORE PUSH5 0x20636F6465 PUSH1 0xD8 SHL PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x314 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAB946323 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xAB946323 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xDD9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5A7BB7CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB4F76F96 SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB9F813FF PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x804 SWAP1 PUSH4 0xB9F813FF SWAP1 PUSH2 0x296 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xEA8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A207475706C65206461746120746F6F2073686F PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x1C9D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C6964207475706C65206F666673 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20737472756374206461746120746F6F207368 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1BDC9D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4C8 JUMPI PUSH2 0x4C8 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F6 JUMPI PUSH2 0x4F6 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C696420737472756374206F6666 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x1CD95D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1C9C985E481BD9999CD95D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x5C1 JUMPI PUSH2 0x5C1 PUSH2 0x490 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642063616C6C646174612061 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x7272617920737472696465 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x63A JUMPI PUSH2 0x63A PUSH2 0x43F JUMP JUMPDEST PUSH2 0x642 PUSH2 0x4A6 JUMP JUMPDEST SWAP2 POP DUP3 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x675 JUMPI PUSH2 0x675 PUSH2 0x4FE JUMP JUMPDEST DUP2 DUP7 ADD SWAP2 POP PUSH1 0x1F DUP8 DUP2 DUP5 ADD SLT PUSH2 0x68D JUMPI PUSH2 0x68D PUSH2 0x54F JUMP JUMPDEST DUP3 CALLDATALOAD PUSH2 0x6A0 PUSH2 0x69B DUP3 PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP5 ADD DUP6 ADD SWAP1 DUP6 DUP2 ADD SWAP1 DUP11 DUP4 GT ISZERO PUSH2 0x6C2 JUMPI PUSH2 0x6C2 PUSH2 0x5CB JUMP JUMPDEST DUP7 DUP7 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x79D JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x6E0 JUMPI PUSH2 0x6E0 PUSH2 0x54F JUMP JUMPDEST DUP8 ADD PUSH1 0x3F DUP2 ADD DUP14 SGT PUSH2 0x6F4 JUMPI PUSH2 0x6F4 PUSH2 0x54F JUMP JUMPDEST DUP9 DUP2 ADD CALLDATALOAD DUP8 DUP2 GT ISZERO PUSH2 0x708 JUMPI PUSH2 0x708 PUSH2 0x490 JUMP JUMPDEST PUSH2 0x719 DUP2 DUP9 ADD PUSH1 0x1F NOT AND DUP12 ADD PUSH2 0x4CE JUMP JUMPDEST DUP2 DUP2 MSTORE DUP15 DUP13 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x77C JUMPI DUP12 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x414249206465636F64696E673A20696E76616C69642062797465206172726179 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x40D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 REVERT JUMPDEST DUP2 DUP13 DUP5 ADD DUP13 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MSTORE POP SWAP2 DUP8 ADD SWAP2 DUP8 ADD PUSH2 0x6C6 JUMP JUMPDEST POP DUP1 DUP8 DUP11 ADD MSTORE POP POP POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7E8 JUMPI PUSH2 0x7E8 PUSH2 0x39F JUMP JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH2 0x802 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x80E DUP10 DUP4 DUP11 ADD PUSH2 0x624 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x835 JUMPI PUSH2 0x835 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x851 PUSH1 0x80 DUP8 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x88F JUMPI PUSH2 0x88F PUSH2 0x39F JUMP JUMPDEST PUSH2 0x898 DUP7 PUSH2 0x85D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x8C4 JUMPI PUSH2 0x8C4 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x842 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x8FD JUMPI PUSH2 0x8FD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP7 CALLDATALOAD GT ISZERO PUSH2 0x916 JUMPI PUSH2 0x916 PUSH2 0x3EF JUMP JUMPDEST DUP6 CALLDATALOAD DUP7 ADD DUP8 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x92C JUMPI PUSH2 0x92C PUSH2 0x54F JUMP JUMPDEST PUSH2 0x939 PUSH2 0x69B DUP3 CALLDATALOAD PUSH2 0x5A8 JUMP JUMPDEST DUP2 CALLDATALOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 SWAP2 PUSH1 0x5 SHL DUP5 ADD ADD DUP11 DUP2 GT ISZERO PUSH2 0x95B JUMPI PUSH2 0x95B PUSH2 0x5CB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E0 JUMPI DUP6 DUP2 CALLDATALOAD GT ISZERO PUSH2 0x979 JUMPI PUSH2 0x979 PUSH2 0x54F JUMP JUMPDEST DUP1 CALLDATALOAD DUP6 ADD PUSH1 0x40 DUP2 DUP15 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH2 0x994 JUMPI PUSH2 0x994 PUSH2 0x43F JUMP JUMPDEST PUSH2 0x99C PUSH2 0x4A6 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP9 DUP2 GT ISZERO PUSH2 0x9B1 JUMPI PUSH2 0x9B1 PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x9C0 DUP16 PUSH1 0x20 DUP4 DUP7 ADD ADD PUSH2 0x624 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x960 JUMP JUMPDEST POP POP DUP1 SWAP8 POP POP POP POP PUSH2 0x9F4 PUSH1 0x20 DUP8 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xA17 DUP9 DUP3 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP4 POP POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xA4B JUMPI PUSH2 0xA4B PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xA65 JUMPI PUSH2 0xA65 PUSH2 0x3EF JUMP JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0x54F JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0xA8C PUSH2 0x69B DUP4 PUSH2 0x5A8 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x6 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP12 DUP5 GT ISZERO PUSH2 0xAAE JUMPI PUSH2 0xAAE PUSH2 0x5CB JUMP JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0xAFA JUMPI PUSH1 0x40 DUP7 DUP14 SUB SLT ISZERO PUSH2 0xACE JUMPI PUSH2 0xACE PUSH2 0x43F JUMP JUMPDEST PUSH2 0xAD6 PUSH2 0x4A6 JUMP JUMPDEST PUSH2 0xADF DUP8 PUSH2 0x85D JUMP JUMPDEST DUP2 MSTORE DUP7 DUP5 ADD CALLDATALOAD DUP5 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP6 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0xAB3 JUMP JUMPDEST SWAP9 POP PUSH2 0xB09 SWAP1 POP DUP10 DUP3 ADD PUSH2 0x8D0 JUMP JUMPDEST SWAP7 POP POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST POP PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST SWAP3 POP POP PUSH2 0xA27 PUSH1 0x60 DUP7 ADD PUSH2 0x7B1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB59 JUMPI PUSH2 0xB59 PUSH2 0x39F JUMP JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0xB73 JUMPI PUSH2 0xB73 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB7F DUP9 DUP4 DUP10 ADD PUSH2 0x624 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB24 JUMPI PUSH2 0xB24 PUSH2 0x3EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBB8 JUMPI PUSH2 0xBB8 PUSH2 0x39F JUMP JUMPDEST PUSH2 0xBC1 DUP6 PUSH2 0x85D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xBE6 JUMPI PUSH2 0xBE6 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0xB31 DUP8 DUP3 DUP9 ADD PUSH2 0x624 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0xFF DUP4 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP3 DUP8 ADD MSTORE DUP3 DUP2 MLOAD DUP1 DUP6 MSTORE PUSH1 0x60 DUP9 ADD SWAP2 POP PUSH1 0x60 DUP2 PUSH1 0x5 SHL DUP10 ADD ADD SWAP5 POP DUP4 DUP4 ADD SWAP3 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xC87 JUMPI DUP10 DUP8 SUB PUSH1 0x5F NOT ADD DUP5 MSTORE DUP5 MLOAD DUP1 MLOAD DUP1 DUP10 MSTORE DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC60 JUMPI DUP3 DUP2 ADD DUP10 ADD MLOAD DUP11 DUP3 ADD DUP11 ADD MSTORE DUP9 ADD PUSH2 0xC45 JUMP JUMPDEST POP DUP9 DUP2 ADD DUP9 ADD DUP5 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 SWAP8 ADD DUP7 ADD SWAP7 POP SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xC2B JUMP JUMPDEST POP SWAP5 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA0 DUP2 MSTORE PUSH1 0x0 PUSH2 0xCA8 PUSH1 0xA0 DUP4 ADD DUP9 PUSH2 0xBF2 JUMP JUMPDEST DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0xCC6 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xD0F PUSH1 0xA0 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD PUSH1 0x80 DUP4 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 POP PUSH1 0xA0 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP1 DUP11 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD97 JUMPI PUSH1 0x9F NOT DUP9 DUP8 SUB ADD DUP6 MSTORE DUP2 MLOAD PUSH1 0x40 DUP2 MLOAD DUP2 DUP10 MSTORE PUSH2 0xD79 DUP3 DUP11 ADD DUP3 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 DUP7 ADD MLOAD SWAP9 DUP7 ADD SWAP9 SWAP1 SWAP9 MSTORE POP SWAP6 POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xD53 JUMP JUMPDEST POP POP PUSH4 0xFFFFFFFF DUP10 AND SWAP1 DUP7 ADD MSTORE POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xDB8 DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xDD0 PUSH1 0x60 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP1 DUP3 MSTORE DUP6 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xA0 DUP5 ADD SWAP1 DUP3 DUP10 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xE26 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP6 ADD MLOAD DUP6 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xDF6 JUMP JUMPDEST POP POP POP PUSH4 0xFFFFFFFF DUP8 AND DUP3 DUP6 ADD MSTORE DUP4 DUP2 SUB PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xE46 DUP2 DUP8 PUSH2 0xBF2 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE75 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0xBF2 JUMP JUMPDEST DUP6 PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xE8D DUP2 DUP7 PUSH2 0xBF2 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xECF PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0xBF2 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH22 0xF5E5C3B6CC37A9C35ED64B92D75971C7FCCFD27ECC15 SWAP15 0xD2 XOR LT LOG4 SWAP11 0xB5 0xC ADDMOD PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", "sourceMap": "119:1996:0:-:0;;;;;;;;;;-1:-1:-1;;;119:1996:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;119:1996:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;119:1996:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;119:1996:0;;;;;;;1058:375;;;;;;:::i;:::-;;:::i;:::-;;419:362;;;;;;:::i;:::-;;:::i;1786:327::-;;;;;;:::i;:::-;;:::i;1439:341::-;;;;;;:::i;:::-;;:::i;787:265::-;;;;;;:::i;:::-;;:::i;161:252::-;;;;;;:::i;:::-;;:::i;1058:375::-;1273:153;;-1:-1:-1;;;1273:153:0;;143:42:1;;1273::0;;:153;;1329:5;;1348:6;;1368:3;;1385:11;;1410:6;;1273:153;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1273:153:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1273:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1058:375;;;;;:::o;419:362::-;621:153;;-1:-1:-1;;;621:153:0;;143:42:1;;621:32:0;;:153;;667:15;;696:6;;716:3;;733:11;;758:6;;621:153;;;:::i;1786:327::-;1974:132;;-1:-1:-1;;;1974:132:0;;143:42:1;;1974:36:0;;:132;;2024:6;;2044:7;;2065:11;;2090:6;;1974:132;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1974:132:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1974:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:327;;;;:::o;1439:341::-;1633:140;;-1:-1:-1;;;1633:140:0;;143:42:1;;1633:40:0;;:140;;1687:10;;1711:7;;1732:11;;1757:6;;1633:140;;;:::i;787:265::-;974:71;;-1:-1:-1;;;974:71:0;;143:42:1;;974:35:0;;:71;;1010:5;;1017:6;;1025:11;;1038:6;;974:71;;;:::i;161:252::-;335:71;;-1:-1:-1;;;335:71:0;;143:42:1;;335:25:0;;:71;;361:15;;378:6;;386:11;;399:6;;335:71;;;:::i;14:375:2:-;136:2;130:9;-1:-1:-1;;;148:32:2;;211:4;207:1;196:13;;189:27;248:2;243;232:14;;225:26;283:34;278:2;267:14;;260:58;-1:-1:-1;;;345:3:2;334:15;;327:29;379:3;130:9;365:18;394:375;516:2;510:9;-1:-1:-1;;;528:32:2;;591:4;587:1;576:13;;569:27;628:2;623;612:14;;605:26;663:34;658:2;647:14;;640:58;-1:-1:-1;;;725:3:2;714:15;;707:29;759:3;510:9;745:18;774:376;896:2;890:9;-1:-1:-1;;;908:32:2;;971:4;967:1;956:13;;949:27;1008:2;1003;992:14;;985:26;1043:34;1038:2;1027:14;;1020:58;-1:-1:-1;;;1105:3:2;1094:15;;1087:30;1140:3;890:9;1126:18;1155:127;1216:10;1211:3;1207:20;1204:1;1197:31;1247:4;1244:1;1237:15;1271:4;1268:1;1261:15;1287:257;1359:4;1353:11;;;1391:17;;-1:-1:-1;;;;;1423:34:2;;1459:22;;;1420:62;1417:88;;;1485:18;;:::i;:::-;1521:4;1514:24;1287:257;:::o;1549:275::-;1620:2;1614:9;1685:2;1666:13;;-1:-1:-1;;1662:27:2;1650:40;;-1:-1:-1;;;;;1705:34:2;;1741:22;;;1702:62;1699:88;;;1767:18;;:::i;:::-;1803:2;1796:22;1549:275;;-1:-1:-1;1549:275:2:o;1829:376::-;1951:2;1945:9;-1:-1:-1;;;1963:32:2;;2026:4;2022:1;2011:13;;2004:27;2063:2;2058;2047:14;;2040:26;2098:34;2093:2;2082:14;;2075:58;-1:-1:-1;;;2160:3:2;2149:15;;2142:30;2195:3;1945:9;2181:18;2210:384;2332:2;2326:9;-1:-1:-1;;;2344:32:2;;2407:4;2403:1;2392:13;;2385:27;2444:2;2439;2428:14;;2421:26;2479:34;2474:2;2463:14;;2456:58;-1:-1:-1;;;2541:3:2;2530:15;;2523:38;2584:3;2326:9;2570:18;2599:181;2657:4;-1:-1:-1;;;;;2682:6:2;2679:30;2676:56;;;2712:18;;:::i;:::-;-1:-1:-1;2757:1:2;2753:14;2769:4;2749:25;;2599:181::o;2785:384::-;2907:2;2901:9;-1:-1:-1;;;2919:32:2;;2982:4;2978:1;2967:13;;2960:27;3019:2;3014;3003:14;;2996:26;3054:34;3049:2;3038:14;;3031:58;-1:-1:-1;;;3116:3:2;3105:15;;3098:38;3159:3;2901:9;3145:18;3174:2630;3234:5;3264:4;3305:2;3293:9;3288:3;3284:19;3280:28;3277:143;;;3331:79;;:::i;:::-;3438:22;;:::i;:::-;3429:31;;3497:9;3484:23;3551:4;3542:7;3538:18;3529:7;3526:31;3516:59;;3571:1;3568;3561:12;3516:59;3584:22;;3625:2;3663:18;;;3650:32;-1:-1:-1;;;;;3731:14:2;;;3728:129;;;3768:79;;:::i;:::-;3891:6;3880:9;3876:22;3866:32;;3917:4;3957:3;3952:2;3948;3944:11;3940:21;3930:144;;3985:79;;:::i;:::-;4106:2;4093:16;4129:58;4145:41;4183:2;4145:41;:::i;:::-;4129:58;:::i;:::-;4221:15;;;4303:1;4299:10;;;;4291:19;;4287:28;;;4252:12;;;;4327:15;;;4324:130;;;4365:79;;:::i;:::-;4482:2;4478;4474:11;4494:1266;4510:6;4505:3;4502:15;4494:1266;;;4596:3;4583:17;4632:2;4619:11;4616:19;4613:146;;;4666:79;;:::i;:::-;4782:20;;4837:2;4829:11;;4825:21;-1:-1:-1;4815:156:2;;4878:79;;:::i;:::-;5015:2;5011;5007:11;4994:25;5042:2;5038;5035:10;5032:36;;;5048:18;;:::i;:::-;5094:51;5118:11;;;-1:-1:-1;;5114:25:2;5110:34;;5094:51;:::i;:::-;5172:2;5165:5;5158:17;5216:3;5211:2;5206;5202;5198:11;5194:20;5191:29;5188:394;;;5264:9;;-1:-1:-1;;;5290:32:2;;5357:1;5346:13;;5339:25;;;5404:2;5399;5388:14;;5381:26;5447:34;5442:2;5431:14;;5424:58;-1:-1:-1;;;5517:3:2;5506:15;;5499:34;5564:3;5264:9;5550:18;5188:394;5637:2;5632;5628;5624:11;5619:2;5612:5;5608:14;5595:45;5685:1;5664:14;;;5660:23;;5653:34;;;;5700:18;;-1:-1:-1;5738:12:2;;;;4527;;4494:1266;;;4498:3;5792:5;5787:2;5780:5;5776:14;5769:29;;;;;;;;;3174:2630;;;;:::o;5809:171::-;5876:20;;-1:-1:-1;;;;;5925:30:2;;5915:41;;5905:69;;5970:1;5967;5960:12;5905:69;5809:171;;;:::o;5985:1106::-;6139:6;6147;6155;6163;6171;6224:3;6212:9;6203:7;6199:23;6195:33;6192:148;;;6251:79;;:::i;:::-;6376:9;6363:23;-1:-1:-1;;;;;6446:2:2;6438:6;6435:14;6432:129;;;6472:79;;:::i;:::-;6580:64;6636:7;6627:6;6616:9;6612:22;6580:64;:::i;:::-;6570:74;;6691:2;6680:9;6676:18;6663:32;6653:42;;6742:2;6731:9;6727:18;6714:32;6704:42;;6799:2;6788:9;6784:18;6771:32;6755:48;;6828:2;6818:8;6815:16;6812:131;;;6854:79;;:::i;:::-;6812:131;6962:66;7020:7;7009:8;6998:9;6994:24;6962:66;:::i;:::-;6952:76;;;7047:38;7080:3;7069:9;7065:19;7047:38;:::i;:::-;7037:48;;5985:1106;;;;;;;;:::o;7096:173::-;7164:20;;-1:-1:-1;;;;;7213:31:2;;7203:42;;7193:70;;7259:1;7256;7249:12;7274:830;7398:6;7406;7414;7422;7430;7483:3;7471:9;7462:7;7458:23;7454:33;7451:148;;;7510:79;;:::i;:::-;7618:29;7637:9;7618:29;:::i;:::-;7608:39;;7694:2;7683:9;7679:18;7666:32;7656:42;;7745:2;7734:9;7730:18;7717:32;7707:42;;7800:2;7789:9;7785:18;7772:32;-1:-1:-1;;;;;7819:6:2;7816:30;7813:145;;;7869:79;;:::i;:::-;7977:64;8033:7;8024:6;8013:9;8009:22;7977:64;:::i;8109:163::-;8176:20;;8236:10;8225:22;;8215:33;;8205:61;;8262:1;8259;8252:12;8277:2580;8443:6;8451;8459;8467;8520:3;8508:9;8499:7;8495:23;8491:33;8488:148;;;8547:79;;:::i;:::-;-1:-1:-1;;;;;8713:2:2;8701:9;8688:23;8685:31;8682:146;;;8739:79;;:::i;:::-;8875:9;8862:23;8851:9;8847:39;8924:7;8917:4;8913:2;8909:13;8905:27;8895:150;;8956:79;;:::i;:::-;9065:72;9081:55;9132:2;9119:16;9081:55;:::i;9065:72::-;9183:16;;9171:29;;;9225:4;9216:14;;;;9159:3;9269:1;9265:24;9257:33;;9253:44;9309:19;;;9306:134;;;9351:79;;:::i;:::-;9468:4;9464:2;9460:13;9482:947;9498:6;9493:3;9490:15;9482:947;;;9579:2;9573:3;9560:17;9557:25;9554:152;;;9613:79;;:::i;:::-;9737:17;;9729:26;;9807:4;9779:16;;;-1:-1:-1;;9775:30:2;9771:41;9768:168;;;9843:79;;:::i;:::-;9962:22;;:::i;:::-;10032:4;10028:2;10024:13;10011:27;10065:2;10057:6;10054:14;10051:141;;;10099:79;;:::i;:::-;10219:68;10279:7;10272:4;10263:6;10259:2;10255:15;10251:26;10219:68;:::i;:::-;10205:83;;-1:-1:-1;10347:4:2;10339:13;;;;10326:27;10319:4;10308:16;;;10301:53;;;;10367:18;;;10405:14;;;;9515;9482:947;;;9486:3;;10448:5;10438:15;;;;;10472:39;10505:4;10494:9;10490:20;10472:39;:::i;:::-;10462:49;;10564:4;10553:9;10549:20;10536:34;10595:2;10585:8;10582:16;10579:131;;;10621:79;;:::i;:::-;10729:66;10787:7;10776:8;10765:9;10761:24;10729:66;:::i;:::-;10719:76;;;;10814:37;10847:2;10836:9;10832:18;10814:37;:::i;:::-;10804:47;;8277:2580;;;;;;;:::o;10862:2113::-;11026:6;11034;11042;11050;11103:3;11091:9;11082:7;11078:23;11074:33;11071:148;;;11130:79;;:::i;:::-;11255:9;11242:23;-1:-1:-1;;;;;11325:2:2;11317:6;11314:14;11311:129;;;11351:79;;:::i;:::-;11474:6;11463:9;11459:22;11449:32;;11519:7;11512:4;11508:2;11504:13;11500:27;11490:150;;11551:79;;:::i;:::-;11672:2;11659:16;11694:4;11718:58;11734:41;11772:2;11734:41;:::i;11718:58::-;11810:15;;;11892:1;11888:10;;;;11880:19;;11876:28;;;11841:12;;;;11916:19;;;11913:134;;;11958:79;;:::i;:::-;12067:11;;;;12087:462;12103:6;12098:3;12095:15;12087:462;;;12185:4;12179:3;12170:7;12166:17;12162:28;12159:155;;;12221:79;;:::i;:::-;12340:22;;:::i;:::-;12389:23;12408:3;12389:23;:::i;:::-;12375:38;;12462:12;;;12449:26;12433:14;;;12426:50;12489:18;;12129:4;12120:14;;;;12527:12;;;;12087:462;;;12568:5;-1:-1:-1;12592:37:2;;-1:-1:-1;12610:18:2;;;12592:37;:::i;:::-;12582:47;;;;12682:4;12671:9;12667:20;12654:34;12638:50;;12713:2;12703:8;12700:16;12697:131;;;12739:79;;:::i;:::-;12697:131;12847:66;12905:7;12894:8;12883:9;12879:24;12847:66;:::i;:::-;12837:76;;;12932:37;12965:2;12954:9;12950:18;12932:37;:::i;12980:1037::-;13125:6;13133;13141;13149;13202:3;13190:9;13181:7;13177:23;13173:33;13170:148;;;13229:79;;:::i;:::-;13354:9;13341:23;-1:-1:-1;;;;;13424:2:2;13416:6;13413:14;13410:129;;;13450:79;;:::i;:::-;13558:64;13614:7;13605:6;13594:9;13590:22;13558:64;:::i;:::-;13548:74;;13669:2;13658:9;13654:18;13641:32;13631:42;;13726:2;13715:9;13711:18;13698:32;13682:48;;13755:2;13745:8;13742:16;13739:131;;;13781:79;;:::i;14022:761::-;14137:6;14145;14153;14161;14214:3;14202:9;14193:7;14189:23;14185:33;14182:148;;;14241:79;;:::i;:::-;14349:29;14368:9;14349:29;:::i;:::-;14339:39;;14425:2;14414:9;14410:18;14397:32;14387:42;;14480:2;14469:9;14465:18;14452:32;-1:-1:-1;;;;;14499:6:2;14496:30;14493:145;;;14549:79;;:::i;:::-;14657:64;14713:7;14704:6;14693:9;14689:22;14657:64;:::i;14788:1191::-;14844:3;14883:4;14878:3;14874:14;14927:4;14919:5;14913:12;14909:23;14904:3;14897:36;14952:4;15002:2;14995:5;14991:14;14985:21;15036:4;15031:2;15026:3;15022:12;15015:26;15063:4;15096:12;15090:19;15131:6;15125:4;15118:20;15165:2;15160:3;15156:12;15147:21;;15221:2;15211:6;15208:1;15204:14;15199:3;15195:24;15191:33;15177:47;;15265:2;15251:12;15247:21;15233:35;;15286:1;15307;15317:634;15333:6;15328:3;15325:15;15317:634;;;15404:16;;;-1:-1:-1;;15400:30:2;15386:45;;15454:13;;15496:9;;15518:24;;;15566:1;15580:157;15596:8;15591:3;15588:17;15580:157;;;15704:12;;;15700:21;;15694:28;15671:16;;;15667:25;;15660:63;15615:12;;15580:157;;;-1:-1:-1;15761:21:2;;;15757:30;;15750:41;;;15857:2;15834:17;-1:-1:-1;;15830:31:2;15818:44;;;15814:53;;;-1:-1:-1;15890:15:2;;;;15927:14;;;;15359:1;15350:11;15317:634;;;-1:-1:-1;15967:6:2;;14788:1191;-1:-1:-1;;;;;;;;14788:1191:2:o;16091:730::-;16450:3;16439:9;16432:22;16413:4;16477:60;16532:3;16521:9;16517:19;16509:6;16477:60;:::i;:::-;16573:6;16568:2;16557:9;16553:18;16546:34;16616:6;16611:2;16600:9;16596:18;16589:34;16671:9;16663:6;16659:22;16654:2;16643:9;16639:18;16632:50;16699:47;16739:6;16731;16699:47;:::i;:::-;16691:55;;;-1:-1:-1;;;;;16787:6:2;16783:31;16777:3;16766:9;16762:19;16755:60;16091:730;;;;;;;;:::o;16826:610::-;17154:1;17150;17145:3;17141:11;17137:19;17129:6;17125:32;17114:9;17107:51;17194:6;17189:2;17178:9;17174:18;17167:34;17237:6;17232:2;17221:9;17217:18;17210:34;17280:3;17275:2;17264:9;17260:18;17253:31;17088:4;17301:60;17356:3;17345:9;17341:19;17333:6;17301:60;:::i;:::-;17293:68;;-1:-1:-1;;;;;17402:6:2;17398:31;17392:3;17381:9;17377:19;17370:60;16826:610;;;;;;;;:::o;17540:1441::-;17876:4;17924:3;17913:9;17909:19;17955:3;17944:9;17937:22;17979:6;18014;18008:13;18045:6;18037;18030:22;18083:3;18072:9;18068:19;18061:26;;18146:3;18136:6;18133:1;18129:14;18118:9;18114:30;18110:40;18096:54;;18169:4;18208:2;18200:6;18196:15;18229:1;18239:503;18253:6;18250:1;18247:13;18239:503;;;18346:3;18342:8;18330:9;18322:6;18318:22;18314:37;18309:3;18302:50;18381:6;18375:13;18411:4;18454:2;18448:9;18485:2;18477:6;18470:18;18515:62;18573:2;18565:6;18561:15;18547:12;18515:62;:::i;:::-;18620:11;;;18614:18;18597:15;;;18590:43;;;;-1:-1:-1;18501:76:2;-1:-1:-1;18720:12:2;;;;18685:15;;;;18275:1;18268:9;18239:503;;;-1:-1:-1;;17517:10:2;17506:22;;18777:18;;;17494:35;-1:-1:-1;;18834:22:2;;;18827:4;18812:20;;18805:52;18874:47;18838:6;18906;18874:47;:::i;:::-;18866:55;;;18930:45;18971:2;18960:9;18956:18;18948:6;-1:-1:-1;;;;;16049:30:2;16037:43;;15984:102;18930:45;17540:1441;;;;;;;:::o;18986:1167::-;19366:3;19379:22;;;19450:13;;19351:19;;;19472:22;;;19318:4;;19548;;19525:3;19510:19;;;19575:15;;;19318:4;19618:282;19632:6;19629:1;19626:13;19618:282;;;19691:13;;19733:9;;-1:-1:-1;;;;;19729:35:2;19717:48;;19805:11;;19799:18;19785:12;;;19778:40;19847:4;19838:14;;;;19875:15;;;;19761:1;19647:9;19618:282;;;19622:3;;;19948:10;19940:6;19936:23;19931:2;19920:9;19916:18;19909:51;20007:9;20002:3;19998:19;19991:4;19980:9;19976:20;19969:49;20035:44;20075:3;20067:6;20035:44;:::i;:::-;20027:52;;;;-1:-1:-1;;;;;20119:6:2;20115:31;20110:2;20099:9;20095:18;20088:59;18986:1167;;;;;;;:::o;20158:658::-;20489:3;20478:9;20471:22;20452:4;20516:60;20571:3;20560:9;20556:19;20548:6;20516:60;:::i;:::-;20612:6;20607:2;20596:9;20592:18;20585:34;20667:9;20659:6;20655:22;20650:2;20639:9;20635:18;20628:50;20695:47;20735:6;20727;20695:47;:::i;:::-;20687:55;;;-1:-1:-1;;;;;20782:6:2;20778:31;20773:2;20762:9;20758:18;20751:59;20158:658;;;;;;;:::o;20821:538::-;21121:1;21117;21112:3;21108:11;21104:19;21096:6;21092:32;21081:9;21074:51;21161:6;21156:2;21145:9;21141:18;21134:34;21204:3;21199:2;21188:9;21184:18;21177:31;21055:4;21225:60;21280:3;21269:9;21265:19;21257:6;21225:60;:::i;:::-;21217:68;;-1:-1:-1;;;;;21325:6:2;21321:31;21316:2;21305:9;21301:18;21294:59;20821:538;;;;;;;:::o" }, "gasEstimates": { @@ -14348,7 +14352,7 @@ ], ".data": { "0": { - ".auxdata": "a26469706673582212202085c2310b813aa1a9795bbb224210110ff7fcebe903592aa6e53d5dd059fe5964736f6c63430008130033", + ".auxdata": "a264697066735822122075f5e5c3b6cc37a9c35ed64b92d75971c7fccfd27ecc159ed21810a49ab50c0864736f6c63430008130033", ".code": [ { "begin": 119, @@ -22473,7 +22477,7 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiCurrencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiassetWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"XTokensInstance.sol\":\"XtokensInstance\"},\"debug\":{\"revertStrings\":\"debug\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"XTokensInstance.sol\":{\"keccak256\":\"0xde7e4b5ab3ac62534e79550d94fa715861e746cf4ea158fd9cb8f61211ea105c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e5561502b1be7ac85753b1e6708911f6b944bca3d361d9546114d368bf82a9b0\",\"dweb:/ipfs/QmSB6AuzPhVc6o5yJbxBmZmCdo3G8u3hRS2EsgiYM81NWz\"]},\"precompiles/xtokens/Xtokens.sol\":{\"keccak256\":\"0x324c9f99f65684f15c026c32896a03c048b33c16d832a70c5a2d27881d748218\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1c975ccf001394fad68d755a7cc9ee78de5685f9785b3896ab0aa96017f1b1ad\",\"dweb:/ipfs/QmPXmiih79eR5yBLRr9EWC5rpsUPxfms8w61SH3gYbykLU\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiCurrencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiassetWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"XTokensInstance.sol\":\"XtokensInstance\"},\"debug\":{\"revertStrings\":\"debug\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"XTokensInstance.sol\":{\"keccak256\":\"0xde7e4b5ab3ac62534e79550d94fa715861e746cf4ea158fd9cb8f61211ea105c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e5561502b1be7ac85753b1e6708911f6b944bca3d361d9546114d368bf82a9b0\",\"dweb:/ipfs/QmSB6AuzPhVc6o5yJbxBmZmCdo3G8u3hRS2EsgiYM81NWz\"]},\"precompiles/xtokens/Xtokens.sol\":{\"keccak256\":\"0xbf95376664b5834defcfa6b3e50f7c2df8c42f1f4c2ae05c6697b9fe18134a1b\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://56126f8c1f9ab9922d313074eaec3341b61cf4f97934e5883071a092ddf95610\",\"dweb:/ipfs/QmQLhc19XsBWvS3FYCk9XwYej3SpoaB1ySmnnSpEvXvzt6\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", diff --git a/tests/contracts/compiled/precompiles/xtokens/Xtokens.json b/tests/contracts/compiled/precompiles/xtokens/Xtokens.json index 64a5e3c73a..8ae7df8dda 100644 --- a/tests/contracts/compiled/precompiles/xtokens/Xtokens.json +++ b/tests/contracts/compiled/precompiles/xtokens/Xtokens.json @@ -229,7 +229,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "currencyAddress": "The ERC20 address of the currency we want to transfer", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)": { @@ -239,7 +240,7 @@ "assets": "The assets we want to transfer, defined by their location and amount.", "destination": "The Multilocation to which we want to send the tokens", "feeItem": "Which of the currencies to be used as fee", - "weight": "The weight we want to buy in the destination chain" + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)": { @@ -249,7 +250,7 @@ "currencies": "The currencies we want to transfer, defined by their address and amount.", "destination": "The Multilocation to which we want to send the tokens", "feeItem": "Which of the currencies to be used as fee", - "weight": "The weight we want to buy in the destination chain" + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)": { @@ -258,7 +259,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)": { @@ -267,7 +269,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } }, "transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)": { @@ -276,7 +279,8 @@ "params": { "amount": "The amount of tokens we want to transfer", "currencyAddress": "The ERC20 address of the currency we want to transfer", - "destination": "The weight we want to buy in the destination chain" + "destination": "The Multilocation to which we want to send the tokens", + "weight": "The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)" } } }, @@ -314,7 +318,7 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiCurrencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiassetWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"The Moonbeam Team\",\"custom:address\":\"0x0000000000000000000000000000000000000804\",\"details\":\"The interface through which solidity contracts will interact with xtokens pallet\",\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"b9f813ff\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"797b45fd\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"ab946323\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"b4f76f96\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"150c016a\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"3e506ef0\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}}},\"title\":\"Xtokens Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Xtokens.sol\":\"Xtokens\"},\"debug\":{\"revertStrings\":\"debug\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"Xtokens.sol\":{\"keccak256\":\"0x324c9f99f65684f15c026c32896a03c048b33c16d832a70c5a2d27881d748218\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1c975ccf001394fad68d755a7cc9ee78de5685f9785b3896ab0aa96017f1b1ad\",\"dweb:/ipfs/QmPXmiih79eR5yBLRr9EWC5rpsUPxfms8w61SH3gYbykLU\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"feeItem\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiCurrencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferMultiassetWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currencyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transferWithFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"The Moonbeam Team\",\"custom:address\":\"0x0000000000000000000000000000000000000804\",\"details\":\"The interface through which solidity contracts will interact with xtokens pallet\",\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"b9f813ff\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"797b45fd\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"ab946323\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"feeItem\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"b4f76f96\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"150c016a\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"custom:selector\":\"3e506ef0\",\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currencyAddress\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"weight\":\"The weight we want to buy in the destination chain (uint64::MAX means Unlimited weight)\"}}},\"title\":\"Xtokens Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transferMultiAssets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transferMultiCurrencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transferMultiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transferMultiassetWithFee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transferWithFee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Xtokens.sol\":\"Xtokens\"},\"debug\":{\"revertStrings\":\"debug\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"Xtokens.sol\":{\"keccak256\":\"0xbf95376664b5834defcfa6b3e50f7c2df8c42f1f4c2ae05c6697b9fe18134a1b\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://56126f8c1f9ab9922d313074eaec3341b61cf4f97934e5883071a092ddf95610\",\"dweb:/ipfs/QmQLhc19XsBWvS3FYCk9XwYej3SpoaB1ySmnnSpEvXvzt6\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", @@ -341,5 +345,5 @@ "version": 1 } }, - "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.3;\n\n/// @dev The Xtokens contract's address.\naddress constant XTOKENS_ADDRESS = 0x0000000000000000000000000000000000000804;\n\n/// @dev The Xtokens contract's instance.\nXtokens constant XTOKENS_CONTRACT = Xtokens(XTOKENS_ADDRESS);\n\n/// @author The Moonbeam Team\n/// @title Xtokens Interface\n/// @dev The interface through which solidity contracts will interact with xtokens pallet\n/// @custom:address 0x0000000000000000000000000000000000000804\ninterface Xtokens {\n // A multilocation is defined by its number of parents and the encoded junctions (interior)\n struct Multilocation {\n uint8 parents;\n bytes[] interior;\n }\n\n // A MultiAsset is defined by a multilocation and an amount\n struct MultiAsset {\n Multilocation location;\n uint256 amount;\n }\n\n // A Currency is defined by address and the amount to be transferred\n struct Currency {\n address currencyAddress;\n uint256 amount;\n }\n\n /// Transfer a token through XCM based on its currencyId\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param currencyAddress The ERC20 address of the currency we want to transfer\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param destination The weight we want to buy in the destination chain\n /// @custom:selector b9f813ff\n function transfer(\n address currencyAddress,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer a token through XCM based on its currencyId specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param currencyAddress The ERC20 address of the currency we want to transfer\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param destination The weight we want to buy in the destination chain\n /// @custom:selector 3e506ef0\n function transferWithFee(\n address currencyAddress,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer a token through XCM based on its MultiLocation\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param asset The asset we want to transfer, defined by its multilocation.\n /// Currently only Concrete Fungible assets\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param destination The weight we want to buy in the destination chain\n /// @custom:selector b4f76f96\n function transferMultiasset(\n Multilocation memory asset,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer a token through XCM based on its MultiLocation specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param asset The asset we want to transfer, defined by its multilocation.\n /// Currently only Concrete Fungible assets\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param destination The weight we want to buy in the destination chain\n /// @custom:selector 150c016a\n function transferMultiassetWithFee(\n Multilocation memory asset,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer several tokens at once through XCM based on its address specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param currencies The currencies we want to transfer, defined by their address and amount.\n /// @param feeItem Which of the currencies to be used as fee\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain\n /// @custom:selector ab946323\n function transferMultiCurrencies(\n Currency[] memory currencies,\n uint32 feeItem,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer several tokens at once through XCM based on its location specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param assets The assets we want to transfer, defined by their location and amount.\n /// @param feeItem Which of the currencies to be used as fee\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain\n /// @custom:selector 797b45fd\n function transferMultiAssets(\n MultiAsset[] memory assets,\n uint32 feeItem,\n Multilocation memory destination,\n uint64 weight\n ) external;\n}\n" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.3;\n\n/// @dev The Xtokens contract's address.\naddress constant XTOKENS_ADDRESS = 0x0000000000000000000000000000000000000804;\n\n/// @dev The Xtokens contract's instance.\nXtokens constant XTOKENS_CONTRACT = Xtokens(XTOKENS_ADDRESS);\n\n/// @author The Moonbeam Team\n/// @title Xtokens Interface\n/// @dev The interface through which solidity contracts will interact with xtokens pallet\n/// @custom:address 0x0000000000000000000000000000000000000804\ninterface Xtokens {\n // A multilocation is defined by its number of parents and the encoded junctions (interior)\n struct Multilocation {\n uint8 parents;\n bytes[] interior;\n }\n\n // A MultiAsset is defined by a multilocation and an amount\n struct MultiAsset {\n Multilocation location;\n uint256 amount;\n }\n\n // A Currency is defined by address and the amount to be transferred\n struct Currency {\n address currencyAddress;\n uint256 amount;\n }\n\n /// Transfer a token through XCM based on its currencyId\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param currencyAddress The ERC20 address of the currency we want to transfer\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain \n /// (uint64::MAX means Unlimited weight)\n /// @custom:selector b9f813ff\n function transfer(\n address currencyAddress,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer a token through XCM based on its currencyId specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param currencyAddress The ERC20 address of the currency we want to transfer\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain \n /// (uint64::MAX means Unlimited weight)\n /// @custom:selector 3e506ef0\n function transferWithFee(\n address currencyAddress,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer a token through XCM based on its MultiLocation\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param asset The asset we want to transfer, defined by its multilocation.\n /// Currently only Concrete Fungible assets\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain \n /// (uint64::MAX means Unlimited weight)\n /// @custom:selector b4f76f96\n function transferMultiasset(\n Multilocation memory asset,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer a token through XCM based on its MultiLocation specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param asset The asset we want to transfer, defined by its multilocation.\n /// Currently only Concrete Fungible assets\n /// @param amount The amount of tokens we want to transfer\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain \n /// (uint64::MAX means Unlimited weight)\n /// @custom:selector 150c016a\n function transferMultiassetWithFee(\n Multilocation memory asset,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer several tokens at once through XCM based on its address specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param currencies The currencies we want to transfer, defined by their address and amount.\n /// @param feeItem Which of the currencies to be used as fee\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain \n /// (uint64::MAX means Unlimited weight)\n /// @custom:selector ab946323\n function transferMultiCurrencies(\n Currency[] memory currencies,\n uint32 feeItem,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /// Transfer several tokens at once through XCM based on its location specifying fee\n ///\n /// @dev The token transfer burns/transfers the corresponding amount before sending\n /// @param assets The assets we want to transfer, defined by their location and amount.\n /// @param feeItem Which of the currencies to be used as fee\n /// @param destination The Multilocation to which we want to send the tokens\n /// @param weight The weight we want to buy in the destination chain \n /// (uint64::MAX means Unlimited weight)\n /// @custom:selector 797b45fd\n function transferMultiAssets(\n MultiAsset[] memory assets,\n uint32 feeItem,\n Multilocation memory destination,\n uint64 weight\n ) external;\n}\n" }