{
  "_format": "hh-sol-artifact-1",
  "contractName": "CustomSmartWallet",
  "sourceName": "contracts/smartwallet/CustomSmartWallet.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "DATA_VERSION_HASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "directExecute",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "ret",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "domainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "suffixData",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "relayHub",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenGas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "validUntilTime",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "feesReceiver",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "sig",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "ret",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwner",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "owner",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "logic",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenAddr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenRecipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenGas",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "initParams",
          "type": "bytes"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isInitialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "swTemplate",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "destinationContract",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "logic",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "initParamsHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "recover",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "ret",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "suffixData",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "relayHub",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenGas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "validUntilTime",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "sig",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b610088565b6000816040516020016100329190610070565b60408051601f1981840301815291905280516020909101207fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a555050565b60609190911b6001600160601b031916815260140190565b611a6c806100976000396000f3fe6080604052600436106100b55760003560e01c8063893d20e811610069578063b3104ef61161004e578063b3104ef614610195578063e6ddc71a146101aa578063f698da25146101ca576100c4565b8063893d20e81461015e578063affed0e014610180576100c4565b806336896bc81161009a57806336896bc814610116578063392e53cd1461012957806375a6dad71461014b576100c4565b806306105d29146100cc578063244f53b5146100ec576100c4565b366100c4576100c26101df565b005b6100c26101df565b3480156100d857600080fd5b506100c26100e7366004611330565b610231565b6100ff6100fa36600461123a565b610278565b60405161010d9291906115f8565b60405180910390f35b6100ff6101243660046110ec565b610400565b34801561013557600080fd5b5061013e61056d565b60405161010d91906115ed565b6100ff6101593660046112ad565b61058d565b34801561016a57600080fd5b506101736108aa565b60405161010d919061161b565b34801561018c57600080fd5b506101736108cf565b3480156101a157600080fd5b506101736108d5565b3480156101b657600080fd5b506100c26101c53660046111a1565b6108f9565b3480156101d657600080fd5b50610173610b23565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54801561022e57604051819036600082376000803683855af43d806000843e81801561022a578184f35b8184fd5b50565b610272848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b2992505050565b50505050565b600060603360405160200161028d91906113c9565b604051602081830303815290604052805190602001206102ab6108aa565b146102d15760405162461bcd60e51b81526004016102c890611999565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc548061036057856001600160a01b03163486866040516103139291906114a7565b60006040518083038185875af1925050503d8060008114610350576040519150601f19603f3d011682016040523d82523d6000602084013e610355565b606091505b5090935091506103c3565b6040516001600160a01b0382169061037c9060009036906114a7565b600060405180830381855af49150503d80600081146103b7576040519150601f19603f3d011682016040523d82523d6000602084013e6103bc565b606091505b5090935091505b47156103f75760405133904780156108fc02916000818181858888f193505050501580156103f5573d6000803e3d6000fd5b505b50935093915050565b60006060600060ff60f81b8b8d338b8a8c6040516020016104259594939291906113e6565b604051602081830303815290604052805190602001208c60405160200161044c91906114d3565b604051602081830303815290604052805190602001206040516020016104759493929190611429565b60408051601f19818403018152919052805160209091012090506001600160a01b03811630146104b75760405162461bcd60e51b81526004016102c8906116b8565b6001600160a01b0389161561052a57886001600160a01b03163486866040516104e19291906114a7565b60006040518083038185875af1925050503d806000811461051e576040519150601f19603f3d011682016040523d82523d6000602084013e610523565b606091505b5090935091505b471561055e5760405133904780156108fc02916000818181858888f1935050505015801561055c573d6000803e3d6000fd5b505b50995099975050505050505050565b6000806105786108aa565b14156105865750600061058a565b5060015b90565b6000606085600001516001600160a01b0316336001600160a01b0316146105c65760405162461bcd60e51b81526004016102c89061175d565b610607878786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b2992505050565b610120860151158061061d575042866101200151115b6106395760405162461bcd60e51b81526004016102c89061180d565b60008054600101905560e0860151156107365785606001516001600160a01b0316866101000151868860e001516040516024016106779291906115d4565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516106ac91906114b7565b60006040518083038160008787f1925050503d80600081146106ea576040519150601f19603f3d011682016040523d82523d6000602084013e6106ef565b606091505b50909250905081801561071a57508051158061071a57508080602001905181019061071a919061128d565b6107365760405162461bcd60e51b81526004016102c890611886565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460a08701515a1161077b5760405162461bcd60e51b81526004016102c89061192b565b806107f95786604001516001600160a01b03168760a0015188608001518961014001516040516107ab91906114b7565b600060405180830381858888f193505050503d80600081146107e9576040519150601f19603f3d011682016040523d82523d6000602084013e6107ee565b606091505b50909350915061085c565b6040516001600160a01b038216906108159060009036906114a7565b600060405180830381855af49150503d8060008114610850576040519150601f19603f3d011682016040523d82523d6000602084013e610855565b606091505b5090935091505b471561089f5760208701516040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561089d573d6000803e3d6000fd5b505b509550959350505050565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5490565b60005481565b7fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a581565b60006109036108aa565b146109205760405162461bcd60e51b81526004016102c890611962565b61092987610c15565b8215610a125760006060866001600160a01b03168487876040516024016109519291906115d4565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161098691906114b7565b60006040518083038160008787f1925050503d80600081146109c4576040519150601f19603f3d011682016040523d82523d6000602084013e6109c9565b606091505b50915091508180156109f35750805115806109f35750808060200190518101906109f3919061128d565b610a0f5760405162461bcd60e51b81526004016102c8906118f4565b50505b6001600160a01b03861615610b12576000866001600160a01b031682604051602401610a3e919061166e565b60408051601f198184030181529181526020820180516001600160e01b03167f439fab910000000000000000000000000000000000000000000000000000000017905251610a8c91906114b7565b600060405180830381855af49150503d8060008114610ac7576040519150601f19603f3d011682016040523d82523d6000602084013e610acc565b606091505b5050905080610aed5760405162461bcd60e51b81526004016102c8906117d6565b867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505b610b1a610c66565b50505050505050565b60015481565b602080830151604051610b3c92016113c9565b60405160208183030381529060405280519060200120610b5a6108aa565b14610b775760405162461bcd60e51b81526004016102c890611999565b8160c0015160005414610b9c5760405162461bcd60e51b81526004016102c890611726565b610bf4610bea82600154610bb08787610d03565b8051602091820120604051610bc693920161153c565b60405160208183030381529060405280519060200120610db090919063ffffffff16565b8360200151610dfb565b610c105760405162461bcd60e51b81526004016102c8906118bd565b505050565b600081604051602001610c2891906113c9565b60408051601f1981840301815291905280516020909101207fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a555050565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd41b7f69f4d7734774d21b5548d74704ad02f9f1545db63927a1d58479c576c87fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5610cd1610e56565b30604051602001610ce6959493929190611624565b60408051601f198184030181529190528051602090910120600155565b8051602080830151604080850151606086810151608088015160a089015160c08a015160e08b01516101008c01516101208d01516101408e01518051908d01209951979c7fdbc4f1d96529fadae86244f9c7b2dc871009d2ad633f32fb7833efcc2c0d53709c610d789c919b919a9901611572565b60408051601f1981840301815290829052610d989291869060200161147a565b60405160208183030381529060405290505b92915050565b60008151604114610dd35760405162461bcd60e51b81526004016102c8906116ef565b60208201516040830151606084015160001a610df186828585610e5a565b9695505050505050565b6000816001600160a01b0316836001600160a01b0316148015610e3b575073dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b03841614155b8015610e4f57506001600160a01b03831615155b9392505050565b4690565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610e9c5760405162461bcd60e51b81526004016102c890611794565b8360ff16601b1480610eb157508360ff16601c145b610ecd5760405162461bcd60e51b81526004016102c890611844565b600060018686868660405160008152602001604052604051610ef29493929190611650565b6020604051602081039080840390855afa158015610f14573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f475760405162461bcd60e51b81526004016102c890611681565b95945050505050565b80356001600160a01b0381168114610daa57600080fd5b60008083601f840112610f78578182fd5b50813567ffffffffffffffff811115610f8f578182fd5b602083019150836020828501011115610fa757600080fd5b9250929050565b600082601f830112610fbe578081fd5b813567ffffffffffffffff811115610fd4578182fd5b610fe7601f8201601f19166020016119ce565b9150808252836020828501011115610ffe57600080fd5b8060208401602084013760009082016020015292915050565b600061016080838503121561102a578182fd5b611033816119ce565b9150506110408383610f50565b815261104f8360208401610f50565b60208201526110618360408401610f50565b60408201526110738360608401610f50565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8111156110d457600080fd5b6110e085828601610fae565b82840152505092915050565b60008060008060008060008060006101008a8c03121561110a578485fd5b893561111581611a21565b985060208a013561112581611a21565b975060408a013561113581611a21565b965060608a013561114581611a21565b955060808a013561115581611a21565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561117e578283fd5b61118a8c828d01610f67565b915080935050809150509295985092959850929598565b600080600080600080600060e0888a0312156111bb578283fd5b87356111c681611a21565b965060208801356111d681611a21565b955060408801356111e681611a21565b945060608801356111f681611a21565b93506080880135925060a0880135915060c088013567ffffffffffffffff81111561121f578182fd5b61122b8a828b01610fae565b91505092959891949750929550565b60008060006040848603121561124e578283fd5b833561125981611a21565b9250602084013567ffffffffffffffff811115611274578283fd5b61128086828701610f67565b9497909650939450505050565b60006020828403121561129e578081fd5b81518015158114610e4f578182fd5b6000806000806000608086880312156112c4578081fd5b85359450602086013567ffffffffffffffff808211156112e2578283fd5b6112ee89838a01611017565b95506112fd8960408a01610f50565b94506060880135915080821115611312578283fd5b5061131f88828901610f67565b969995985093965092949392505050565b60008060008060608587031215611345578384fd5b84359350602085013567ffffffffffffffff80821115611363578485fd5b61136f88838901611017565b94506040870135915080821115611384578384fd5b5061139187828801610f67565b95989497509550505050565b600081518084526113b58160208601602086016119f5565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6bffffffffffffffffffffffff19606096871b8116825294861b851660148201529290941b9092166028820152603c810191909152605c810191909152607c0190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b600084825283516114928160208501602088016119f5565b60209201918201929092526040019392505050565b6000828483379101908152919050565b600082516114c98184602087016119f5565b9190910192915050565b7f602d3d8160093d39f3363d3d373d3d3d3d363d73000000000000000000000000815260609190911b6bffffffffffffffffffffffff191660148201527f5af43d923d90803e602b57fd5bf3000000000000000000000000000000000000602882015260360190565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b039b8c168152998b1660208b0152978a1660408a0152959098166060880152608087019390935260a086019190915260c085015260e08401526101008301939093526101208201929092526101408101919091526101600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000831515825260406020830152611613604083018461139d565b949350505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610e4f602083018461139d565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526011908201527f496e76616c6964207265636f7665726572000000000000000000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252600e908201527f6e6f6e6365206d69736d61746368000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f496e76616c69642063616c6c6572000000000000000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601f908201527f696e697469616c697a652063616c6c20696e206c6f676963206661696c656400604082015260600190565b60208082526013908201527f53573a2072657175657374206578706972656400000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526017908201527f556e61626c6520746f2070617920666f722072656c6179000000000000000000604082015260600190565b60208082526012908201527f5369676e6174757265206d69736d617463680000000000000000000000000000604082015260600190565b6020808252601c908201527f556e61626c6520746f2070617920666f72206465706c6f796d656e7400000000604082015260600190565b60208082526013908201527f4e6f7420656e6f75676820676173206c65667400000000000000000000000000604082015260600190565b60208082526013908201527f416c726561647920696e697469616c697a656400000000000000000000000000604082015260600190565b6020808252818101527f4e6f7420746865206f776e6572206f662074686520536d61727457616c6c6574604082015260600190565b60405181810167ffffffffffffffff811182821017156119ed57600080fd5b604052919050565b60005b83811015611a105781810151838201526020016119f8565b838111156102725750506000910152565b6001600160a01b038116811461022e57600080fdfea2646970667358221220d03eb2a5855c0c9036df9bd9286f72aad6b7a9d36ebbd809f0b00b9521682a5264736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106100b55760003560e01c8063893d20e811610069578063b3104ef61161004e578063b3104ef614610195578063e6ddc71a146101aa578063f698da25146101ca576100c4565b8063893d20e81461015e578063affed0e014610180576100c4565b806336896bc81161009a57806336896bc814610116578063392e53cd1461012957806375a6dad71461014b576100c4565b806306105d29146100cc578063244f53b5146100ec576100c4565b366100c4576100c26101df565b005b6100c26101df565b3480156100d857600080fd5b506100c26100e7366004611330565b610231565b6100ff6100fa36600461123a565b610278565b60405161010d9291906115f8565b60405180910390f35b6100ff6101243660046110ec565b610400565b34801561013557600080fd5b5061013e61056d565b60405161010d91906115ed565b6100ff6101593660046112ad565b61058d565b34801561016a57600080fd5b506101736108aa565b60405161010d919061161b565b34801561018c57600080fd5b506101736108cf565b3480156101a157600080fd5b506101736108d5565b3480156101b657600080fd5b506100c26101c53660046111a1565b6108f9565b3480156101d657600080fd5b50610173610b23565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54801561022e57604051819036600082376000803683855af43d806000843e81801561022a578184f35b8184fd5b50565b610272848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b2992505050565b50505050565b600060603360405160200161028d91906113c9565b604051602081830303815290604052805190602001206102ab6108aa565b146102d15760405162461bcd60e51b81526004016102c890611999565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc548061036057856001600160a01b03163486866040516103139291906114a7565b60006040518083038185875af1925050503d8060008114610350576040519150601f19603f3d011682016040523d82523d6000602084013e610355565b606091505b5090935091506103c3565b6040516001600160a01b0382169061037c9060009036906114a7565b600060405180830381855af49150503d80600081146103b7576040519150601f19603f3d011682016040523d82523d6000602084013e6103bc565b606091505b5090935091505b47156103f75760405133904780156108fc02916000818181858888f193505050501580156103f5573d6000803e3d6000fd5b505b50935093915050565b60006060600060ff60f81b8b8d338b8a8c6040516020016104259594939291906113e6565b604051602081830303815290604052805190602001208c60405160200161044c91906114d3565b604051602081830303815290604052805190602001206040516020016104759493929190611429565b60408051601f19818403018152919052805160209091012090506001600160a01b03811630146104b75760405162461bcd60e51b81526004016102c8906116b8565b6001600160a01b0389161561052a57886001600160a01b03163486866040516104e19291906114a7565b60006040518083038185875af1925050503d806000811461051e576040519150601f19603f3d011682016040523d82523d6000602084013e610523565b606091505b5090935091505b471561055e5760405133904780156108fc02916000818181858888f1935050505015801561055c573d6000803e3d6000fd5b505b50995099975050505050505050565b6000806105786108aa565b14156105865750600061058a565b5060015b90565b6000606085600001516001600160a01b0316336001600160a01b0316146105c65760405162461bcd60e51b81526004016102c89061175d565b610607878786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b2992505050565b610120860151158061061d575042866101200151115b6106395760405162461bcd60e51b81526004016102c89061180d565b60008054600101905560e0860151156107365785606001516001600160a01b0316866101000151868860e001516040516024016106779291906115d4565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516106ac91906114b7565b60006040518083038160008787f1925050503d80600081146106ea576040519150601f19603f3d011682016040523d82523d6000602084013e6106ef565b606091505b50909250905081801561071a57508051158061071a57508080602001905181019061071a919061128d565b6107365760405162461bcd60e51b81526004016102c890611886565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460a08701515a1161077b5760405162461bcd60e51b81526004016102c89061192b565b806107f95786604001516001600160a01b03168760a0015188608001518961014001516040516107ab91906114b7565b600060405180830381858888f193505050503d80600081146107e9576040519150601f19603f3d011682016040523d82523d6000602084013e6107ee565b606091505b50909350915061085c565b6040516001600160a01b038216906108159060009036906114a7565b600060405180830381855af49150503d8060008114610850576040519150601f19603f3d011682016040523d82523d6000602084013e610855565b606091505b5090935091505b471561089f5760208701516040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561089d573d6000803e3d6000fd5b505b509550959350505050565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5490565b60005481565b7fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a581565b60006109036108aa565b146109205760405162461bcd60e51b81526004016102c890611962565b61092987610c15565b8215610a125760006060866001600160a01b03168487876040516024016109519291906115d4565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161098691906114b7565b60006040518083038160008787f1925050503d80600081146109c4576040519150601f19603f3d011682016040523d82523d6000602084013e6109c9565b606091505b50915091508180156109f35750805115806109f35750808060200190518101906109f3919061128d565b610a0f5760405162461bcd60e51b81526004016102c8906118f4565b50505b6001600160a01b03861615610b12576000866001600160a01b031682604051602401610a3e919061166e565b60408051601f198184030181529181526020820180516001600160e01b03167f439fab910000000000000000000000000000000000000000000000000000000017905251610a8c91906114b7565b600060405180830381855af49150503d8060008114610ac7576040519150601f19603f3d011682016040523d82523d6000602084013e610acc565b606091505b5050905080610aed5760405162461bcd60e51b81526004016102c8906117d6565b867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505b610b1a610c66565b50505050505050565b60015481565b602080830151604051610b3c92016113c9565b60405160208183030381529060405280519060200120610b5a6108aa565b14610b775760405162461bcd60e51b81526004016102c890611999565b8160c0015160005414610b9c5760405162461bcd60e51b81526004016102c890611726565b610bf4610bea82600154610bb08787610d03565b8051602091820120604051610bc693920161153c565b60405160208183030381529060405280519060200120610db090919063ffffffff16565b8360200151610dfb565b610c105760405162461bcd60e51b81526004016102c8906118bd565b505050565b600081604051602001610c2891906113c9565b60408051601f1981840301815291905280516020909101207fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a555050565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd41b7f69f4d7734774d21b5548d74704ad02f9f1545db63927a1d58479c576c87fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5610cd1610e56565b30604051602001610ce6959493929190611624565b60408051601f198184030181529190528051602090910120600155565b8051602080830151604080850151606086810151608088015160a089015160c08a015160e08b01516101008c01516101208d01516101408e01518051908d01209951979c7fdbc4f1d96529fadae86244f9c7b2dc871009d2ad633f32fb7833efcc2c0d53709c610d789c919b919a9901611572565b60408051601f1981840301815290829052610d989291869060200161147a565b60405160208183030381529060405290505b92915050565b60008151604114610dd35760405162461bcd60e51b81526004016102c8906116ef565b60208201516040830151606084015160001a610df186828585610e5a565b9695505050505050565b6000816001600160a01b0316836001600160a01b0316148015610e3b575073dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b03841614155b8015610e4f57506001600160a01b03831615155b9392505050565b4690565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610e9c5760405162461bcd60e51b81526004016102c890611794565b8360ff16601b1480610eb157508360ff16601c145b610ecd5760405162461bcd60e51b81526004016102c890611844565b600060018686868660405160008152602001604052604051610ef29493929190611650565b6020604051602081039080840390855afa158015610f14573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f475760405162461bcd60e51b81526004016102c890611681565b95945050505050565b80356001600160a01b0381168114610daa57600080fd5b60008083601f840112610f78578182fd5b50813567ffffffffffffffff811115610f8f578182fd5b602083019150836020828501011115610fa757600080fd5b9250929050565b600082601f830112610fbe578081fd5b813567ffffffffffffffff811115610fd4578182fd5b610fe7601f8201601f19166020016119ce565b9150808252836020828501011115610ffe57600080fd5b8060208401602084013760009082016020015292915050565b600061016080838503121561102a578182fd5b611033816119ce565b9150506110408383610f50565b815261104f8360208401610f50565b60208201526110618360408401610f50565b60408201526110738360608401610f50565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8111156110d457600080fd5b6110e085828601610fae565b82840152505092915050565b60008060008060008060008060006101008a8c03121561110a578485fd5b893561111581611a21565b985060208a013561112581611a21565b975060408a013561113581611a21565b965060608a013561114581611a21565b955060808a013561115581611a21565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561117e578283fd5b61118a8c828d01610f67565b915080935050809150509295985092959850929598565b600080600080600080600060e0888a0312156111bb578283fd5b87356111c681611a21565b965060208801356111d681611a21565b955060408801356111e681611a21565b945060608801356111f681611a21565b93506080880135925060a0880135915060c088013567ffffffffffffffff81111561121f578182fd5b61122b8a828b01610fae565b91505092959891949750929550565b60008060006040848603121561124e578283fd5b833561125981611a21565b9250602084013567ffffffffffffffff811115611274578283fd5b61128086828701610f67565b9497909650939450505050565b60006020828403121561129e578081fd5b81518015158114610e4f578182fd5b6000806000806000608086880312156112c4578081fd5b85359450602086013567ffffffffffffffff808211156112e2578283fd5b6112ee89838a01611017565b95506112fd8960408a01610f50565b94506060880135915080821115611312578283fd5b5061131f88828901610f67565b969995985093965092949392505050565b60008060008060608587031215611345578384fd5b84359350602085013567ffffffffffffffff80821115611363578485fd5b61136f88838901611017565b94506040870135915080821115611384578384fd5b5061139187828801610f67565b95989497509550505050565b600081518084526113b58160208601602086016119f5565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6bffffffffffffffffffffffff19606096871b8116825294861b851660148201529290941b9092166028820152603c810191909152605c810191909152607c0190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b600084825283516114928160208501602088016119f5565b60209201918201929092526040019392505050565b6000828483379101908152919050565b600082516114c98184602087016119f5565b9190910192915050565b7f602d3d8160093d39f3363d3d373d3d3d3d363d73000000000000000000000000815260609190911b6bffffffffffffffffffffffff191660148201527f5af43d923d90803e602b57fd5bf3000000000000000000000000000000000000602882015260360190565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b039b8c168152998b1660208b0152978a1660408a0152959098166060880152608087019390935260a086019190915260c085015260e08401526101008301939093526101208201929092526101408101919091526101600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000831515825260406020830152611613604083018461139d565b949350505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610e4f602083018461139d565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526011908201527f496e76616c6964207265636f7665726572000000000000000000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252600e908201527f6e6f6e6365206d69736d61746368000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f496e76616c69642063616c6c6572000000000000000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601f908201527f696e697469616c697a652063616c6c20696e206c6f676963206661696c656400604082015260600190565b60208082526013908201527f53573a2072657175657374206578706972656400000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526017908201527f556e61626c6520746f2070617920666f722072656c6179000000000000000000604082015260600190565b60208082526012908201527f5369676e6174757265206d69736d617463680000000000000000000000000000604082015260600190565b6020808252601c908201527f556e61626c6520746f2070617920666f72206465706c6f796d656e7400000000604082015260600190565b60208082526013908201527f4e6f7420656e6f75676820676173206c65667400000000000000000000000000604082015260600190565b60208082526013908201527f416c726561647920696e697469616c697a656400000000000000000000000000604082015260600190565b6020808252818101527f4e6f7420746865206f776e6572206f662074686520536d61727457616c6c6574604082015260600190565b60405181810167ffffffffffffffff811182821017156119ed57600080fd5b604052919050565b60005b83811015611a105781810151838201526020016119f8565b838111156102725750506000910152565b6001600160a01b038116811461022e57600080fdfea2646970667358221220d03eb2a5855c0c9036df9bd9286f72aad6b7a9d36ebbd809f0b00b9521682a5264736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
