{
  "contractName": "ProxySafeSimpleRestrictedFDT",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "whitelist",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedBy",
          "type": "address"
        }
      ],
      "name": "AddressAddedToWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "whitelist",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedBy",
          "type": "address"
        }
      ],
      "name": "AddressRemovedFromWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedAdmin",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "addedBy",
          "type": "address"
        }
      ],
      "name": "AdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedAdmin",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "removedBy",
          "type": "address"
        }
      ],
      "name": "AdminRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsDistributed",
          "type": "uint256"
        }
      ],
      "name": "FundsDistributed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsWithdrawn",
          "type": "uint256"
        }
      ],
      "name": "FundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "updatedBy",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "sourceWhitelist",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "destinationWhitelist",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "from",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "to",
          "type": "bool"
        }
      ],
      "name": "OutboundWhitelistUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "RestrictionsDisabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "FAILURE_NON_WHITELIST",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FAILURE_NON_WHITELIST_MESSAGE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUCCESS_CODE",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUCCESS_MESSAGE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNKNOWN_ERROR",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "accumulativeFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminToAdd",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressToAdd",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "whitelist",
          "type": "uint8"
        }
      ],
      "name": "addToWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "addressWhitelists",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "administrators",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "checkWhitelistAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "detectTransferRestriction",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableRestrictions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsTokenBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "contract IERC20",
          "name": "_fundsToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialAmount",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressToTest",
          "type": "address"
        }
      ],
      "name": "isAdministrator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRestrictionEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "restrictionCode",
          "type": "uint8"
        }
      ],
      "name": "messageForTransferRestriction",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "outboundWhitelistsEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "owners",
          "type": "address[]"
        }
      ],
      "name": "pushFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminToRemove",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressToRemove",
          "type": "address"
        }
      ],
      "name": "removeFromWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateFundsReceived",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "sourceWhitelist",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "destinationWhitelist",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "newEnabledValue",
          "type": "bool"
        }
      ],
      "name": "updateOutboundWhitelistEnabled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "withdrawableFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "withdrawnFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260cf805460ff1916600117905534801561001d57600080fd5b50612cdc8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106102735760003560e01c806370a0823111610151578063a457c2d7116100c3578063d4ce141511610087578063d4ce141514610910578063dce306ad14610946578063dd62ed3e1461094e578063e7984d171461097c578063e959450814610984578063f2fde38b146109ac57610273565b8063a457c2d714610763578063a9059cbb1461078f578063a9691f3f146107bb578063c8934462146107c3578063c9aba0aa146107cb57610273565b80638da5cb5b116101155780638da5cb5b146106cb57806392e6d68b146106d35780639437e2fe146106f957806395d89b411461072757806397af67441461072f5780639dc29fac1461073757610273565b806370a0823114610631578063715018a61461065757806376be15851461065f5780637f4ab1dd146106855780638ab1d681146106a557610273565b80632a642407116101ea578063443bb293116101ae578063443bb293146104f057806345f634f21461051657806346c162de146105b95780634e97415f146105c157806363f04b15146105e7578063704802751461060b57610273565b80632a64240714610456578063313ce5671461045e57806339509351146104665780633973b5961461049257806340c10f19146104c457610273565b80630e969a051161023c5780630e969a05146103c45780631785f53c146103e257806318160ddd146104085780631fb45ec01461041057806323b872dd1461041857806324600fc31461044e57610273565b806241c52c146102785780630263b858146102b057806306fdde03146102e1578063095ea7b31461035e5780630a2eb3011461039e575b600080fd5b61029e6004803603602081101561028e57600080fd5b50356001600160a01b03166109d2565b60408051918252519081900360200190f35b6102df600480360360408110156102c657600080fd5b5080356001600160a01b0316906020013560ff166109f1565b005b6102e9610b35565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038a6004803603604081101561037457600080fd5b506001600160a01b038135169060200135610bcc565b604080519115158252519081900360200190f35b61038a600480360360208110156103b457600080fd5b50356001600160a01b0316610bea565b6103cc610c08565b6040805160ff9092168252519081900360200190f35b6102df600480360360208110156103f857600080fd5b50356001600160a01b0316610c0d565b61029e610d0c565b6103cc610d12565b61038a6004803603606081101561042e57600080fd5b506001600160a01b03813581169160208101359091169060400135610d17565b6102df610dda565b61038a610de5565b6103cc610dee565b61038a6004803603604081101561047c57600080fd5b506001600160a01b038135169060200135610df7565b6102df600480360360608110156104a857600080fd5b5060ff8135811691602081013590911690604001351515610e50565b61038a600480360360408110156104da57600080fd5b506001600160a01b038135169060200135610f0d565b61029e6004803603602081101561050657600080fd5b50356001600160a01b0316610f71565b6102df6004803603602081101561052c57600080fd5b81019060208101813564010000000081111561054757600080fd5b82018360208201111561055957600080fd5b8035906020019184602083028401116401000000008311171561057b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fa3945050505050565b6102df610fd7565b61029e600480360360208110156105d757600080fd5b50356001600160a01b0316611000565b6105ef611069565b604080516001600160a01b039092168252519081900360200190f35b6102df6004803603602081101561062157600080fd5b50356001600160a01b031661107d565b61029e6004803603602081101561064757600080fd5b50356001600160a01b031661117b565b6102df611196565b61038a6004803603602081101561067557600080fd5b50356001600160a01b0316611238565b6102e96004803603602081101561069b57600080fd5b503560ff1661124d565b6102df600480360360208110156106bb57600080fd5b50356001600160a01b03166112d5565b6105ef611370565b6103cc600480360360208110156106e957600080fd5b50356001600160a01b031661137f565b61038a6004803603604081101561070f57600080fd5b506001600160a01b0381358116916020013516611394565b6102e9611406565b6102e9611467565b61038a6004803603604081101561074d57600080fd5b506001600160a01b038135169060200135611495565b61038a6004803603604081101561077957600080fd5b506001600160a01b0381351690602001356114f9565b61038a600480360360408110156107a557600080fd5b506001600160a01b038135169060200135611567565b61029e6115eb565b6102e96115f1565b6102df600480360360a08110156107e157600080fd5b8101906020810181356401000000008111156107fc57600080fd5b82018360208201111561080e57600080fd5b8035906020019184600183028401116401000000008311171561083057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460018302840111640100000000831117156108b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260400135915061160d9050565b6103cc6004803603606081101561092657600080fd5b506001600160a01b0381358116916020810135909116906040013561173e565b6102df61179e565b61029e6004803603604081101561096457600080fd5b506001600160a01b038135811691602001351661186e565b6102e9611899565b61038a6004803603604081101561099a57600080fd5b5060ff813581169160200135166118bc565b6102df600480360360208110156109c257600080fd5b50356001600160a01b03166118dc565b6001600160a01b0381166000908152609960205260409020545b919050565b6109fa33610bea565b610a355760405162461bcd60e51b8152600401808060200182810382526028815260200180612a946028913960400191505060405180910390fd5b60ff8116610a8a576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077686974656c69737420494420737570706c696564000000604482015290519081900360640190fd5b6001600160a01b038216600090815260cd60205260409020805460ff83811660ff19831617909255168015610af557604051339060ff8316906001600160a01b038616907fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e90600090a45b604051339060ff8416906001600160a01b038616907fca6d1e885708b837a7647aeb7f4163ee4ca96058e08ac767be8d23c972c5027090600090a4505050565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b820191906000526020600020905b815481529060010190602001808311610ba457829003601f168201915b505050505090505b90565b6000610be0610bd96119d5565b84846119d9565b5060015b92915050565b6001600160a01b0316600090815260cc602052604090205460ff1690565b600081565b610c156119d5565b609a546001600160a01b03908116911614610c65576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161515600114610cc15760405162461bcd60e51b815260040180806020018281038252603d8152602001806129fa603d913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055513392917fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce91a350565b60675490565b600181565b60008383836000610d2984848461173e565b905060ff811615610d398261124d565b90610dc25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d87578181015183820152602001610d6f565b50505050905090810190601f168015610db45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610dce888888611ac5565b98975050505050505050565b610de333611b4d565b565b60cf5460ff1690565b606a5460ff1690565b6000610be0610e046119d5565b84610e4b8560666000610e156119d5565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611c2916565b6119d9565b610e5933610bea565b610e945760405162461bcd60e51b8152600401808060200182810382526028815260200180612a946028913960400191505060405180910390fd5b60ff838116600081815260ce6020908152604080832087861680855290835292819020805487151560ff1982168117909255825196168015158752928601528051919492939233927fb0353d563a9aa5231878c83727dc723a3cb8a38c2917f8ac2b777aa564c8a0d5929181900390910190a450505050565b6000610f176119d5565b609a546001600160a01b03908116911614610f67576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b610be08383611c83565b6001600160a01b038116600090815260996020526040812054610be490610f9784611000565b9063ffffffff611ced16565b60005b8151811015610fd357610fcb828281518110610fbe57fe5b6020026020010151611b4d565b600101610fa6565b5050565b6000610fe1611d2f565b90506000811315610ffd57610ffd610ff882611dca565b611ddd565b50565b6001600160a01b038116600090815260986020526040812054600160801b9061105b906110569061104a6110456110368861117b565b6097549063ffffffff611e9c16565b611ef5565b9063ffffffff611f0516565b611dca565b8161106257fe5b0492915050565b60cf5461010090046001600160a01b031681565b6110856119d5565b609a546001600160a01b039081169116146110d5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161561112d5760405162461bcd60e51b8152600401808060200182810382526035815260200180612c726035913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055513392917fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b91a350565b6001600160a01b031660009081526065602052604090205490565b61119e6119d5565b609a546001600160a01b039081169116146111ee576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609a80546001600160a01b0319169055565b60cc6020526000908152604090205460ff1681565b606060ff821661127b57506040805180820190915260078152665355434345535360c81b60208201526109ec565b60ff8216600114156112a7576040518060600160405280603c8152602001612bdf603c913990506109ec565b5050604080518082019091526012815271556e6b6e6f776e204572726f7220436f646560701b602082015290565b6112de33610bea565b6113195760405162461bcd60e51b8152600401808060200182810382526028815260200180612a946028913960400191505060405180910390fd5b6001600160a01b038116600081815260cd6020526040808220805460ff198116909155905160ff90911692339284927fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e9190a45050565b609a546001600160a01b031690565b60cd6020526000908152604090205460ff1681565b6001600160a01b03808316600090815260cd6020526040808220549284168252812054909160ff90811691168115806113ce575060ff8116155b156113de57600092505050610be4565b60ff918216600090815260ce6020908152604080832093851683529290522054169392505050565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b60405180604001604052806012815260200171556e6b6e6f776e204572726f7220436f646560701b81525081565b600061149f6119d5565b609a546001600160a01b039081169116146114ef576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b610be08383611f38565b6000610be06115066119d5565b84610e4b85604051806060016040528060258152602001612c1b60259139606660006115306119d5565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611f8216565b6000338383600061157984848461173e565b905060ff8116156115898261124d565b906115d55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b506115e08787611fdc565b979650505050505050565b60d05481565b6040518060600160405280603c8152602001612bdf603c913981565b600054610100900460ff16806116265750611626611ff0565b80611634575060005460ff16155b61166f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff1615801561169a576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0384166116df5760405162461bcd60e51b81526004018080602001828103825260308152602001806129ca6030913960400191505060405180910390fd5b6116e98686611ff6565b6116f16120ab565b60cf8054610100600160a81b0319166101006001600160a01b0387160217905561171a836118dc565b6117248383611c83565b8015611736576000805461ff00191690555b505050505050565b6000611748610de5565b61175457506000611797565b61175c611370565b6001600160a01b0316846001600160a01b0316141561177d57506000611797565b6117878484611394565b61179357506001611797565b5060005b9392505050565b6117a66119d5565b609a546001600160a01b039081169116146117f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b60cf5460ff166118375760405162461bcd60e51b8152600401808060200182810382526022815260200180612b536022913960400191505060405180910390fd5b60cf805460ff1916905560405133907f3c13a557aa89734e312c348465096b4ddc97709822675c45090f4e2a8d6c4f2b90600090a2565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b604051806040016040528060078152602001665355434345535360c81b81525081565b60ce60209081526000928352604080842090915290825290205460ff1681565b6118e46119d5565b609a546001600160a01b03908116911614611934576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b6001600160a01b0381166119795760405162461bcd60e51b81526004018080602001828103825260268152602001806129826026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316611a1e5760405162461bcd60e51b8152600401808060200182810382526024815260200180612bbb6024913960400191505060405180910390fd5b6001600160a01b038216611a635760405162461bcd60e51b81526004018080602001828103825260228152602001806129a86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611ad284848461215c565b611b4384611ade6119d5565b610e4b85604051806060016040528060288152602001612add602891396001600160a01b038a16600090815260666020526040812090611b1c6119d5565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611f8216565b5060019392505050565b6000611b5882612204565b60cf546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151939450610100909204169163a9059cbb916044808201926020929091908290030181600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b505050506040513d6020811015611bdf57600080fd5b5051611c1c5760405162461bcd60e51b8152600401808060200182810382526032815260200180612c406032913960400191505060405180910390fd5b611c24611d2f565b505050565b600082820183811015611797576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611c8d8282612294565b611ccd611ca861104583609754611e9c90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff61239216565b6001600160a01b0390921660009081526098602052604090209190915550565b600061179783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f82565b60d05460cf54604080516370a0823160e01b815230600482015290516000939261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d8357600080fd5b505afa158015611d97573d6000803e3d6000fd5b505050506040513d6020811015611dad57600080fd5b505160d0819055611dc4908263ffffffff61239216565b91505090565b600080821215611dd957600080fd5b5090565b6000611de7610d0c565b11611e235760405162461bcd60e51b8152600401808060200182810382526037815260200180612a5d6037913960400191505060405180910390fd5b8015610ffd57611e60611e34610d0c565b611e4883600160801b63ffffffff611e9c16565b81611e4f57fe5b60975491900463ffffffff611c2916565b60975560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a250565b600082611eab57506000610be4565b82820282848281611eb857fe5b04146117975760405162461bcd60e51b8152600401808060200182810382526021815260200180612abc6021913960400191505060405180910390fd5b60008181811215610be457600080fd5b6000828201818312801590611f1a5750838112155b80611f2f5750600083128015611f2f57508381125b61179757600080fd5b611f4282826123cc565b611ccd611f5d61104583609754611e9c90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff611f0516565b60008184841115611fd45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b505050900390565b6000610be0611fe96119d5565b848461215c565b303b1590565b600054610100900460ff168061200f575061200f611ff0565b8061201d575060005460ff16155b6120585760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612083576000805460ff1961ff0019909116610100171660011790555b61208b6124d4565b6120958383612574565b8015611c24576000805461ff0019169055505050565b600054610100900460ff16806120c457506120c4611ff0565b806120d2575060005460ff16155b61210d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612138576000805460ff1961ff0019909116610100171660011790555b6121406124d4565b61214861264c565b8015610ffd576000805461ff001916905550565b612167838383612745565b600061218161104583609754611e9c90919063ffffffff16565b6001600160a01b0385166000908152609860205260409020549091506121ad908263ffffffff611f0516565b6001600160a01b0380861660009081526098602052604080822093909355908516815220546121e2908263ffffffff61239216565b6001600160a01b03909316600090815260986020526040902092909255505050565b60008061221083610f71565b6001600160a01b03841660009081526099602052604090205490915061223c908263ffffffff611c2916565b6001600160a01b038416600081815260996020908152604091829020939093558051848152905191927feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d92918290030190a292915050565b6001600160a01b0382166122ef576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122fb60008383611c24565b60675461230e908263ffffffff611c2916565b6067556001600160a01b03821660009081526065602052604090205461233a908263ffffffff611c2916565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008082121580156123a657508282840313155b806123bd57506000821280156123bd575082828403135b6123c657600080fd5b50900390565b6001600160a01b0382166124115760405162461bcd60e51b8152600401808060200182810382526021815260200180612b756021913960400191505060405180910390fd5b61241d82600083611c24565b61246081604051806060016040528060228152602001612960602291396001600160a01b038516600090815260656020526040902054919063ffffffff611f8216565b6001600160a01b03831660009081526065602052604090205560675461248c908263ffffffff611ced16565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600054610100900460ff16806124ed57506124ed611ff0565b806124fb575060005460ff16155b6125365760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612148576000805460ff1961ff0019909116610100171660011790558015610ffd576000805461ff001916905550565b600054610100900460ff168061258d575061258d611ff0565b8061259b575060005460ff16155b6125d65760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612601576000805460ff1961ff0019909116610100171660011790555b82516126149060689060208601906128ae565b5081516126289060699060208501906128ae565b50606a805460ff191660121790558015611c24576000805461ff0019169055505050565b600054610100900460ff16806126655750612665611ff0565b80612673575060005460ff16155b6126ae5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff161580156126d9576000805460ff1961ff0019909116610100171660011790555b60006126e36119d5565b609a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ffd576000805461ff001916905550565b6001600160a01b03831661278a5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b966025913960400191505060405180910390fd5b6001600160a01b0382166127cf5760405162461bcd60e51b815260040180806020018281038252602381526020018061293d6023913960400191505060405180910390fd5b6127da838383611c24565b61281d81604051806060016040528060268152602001612a37602691396001600160a01b038616600090815260656020526040902054919063ffffffff611f8216565b6001600160a01b038085166000908152606560205260408082209390935590841681522054612852908263ffffffff611c2916565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128ef57805160ff191683800117855561291c565b8280016001018555821561291c579182015b8281111561291c578251825591602001919060010190612901565b50611dd992610bc99250905b80821115611dd9576000815560010161292856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737353696d706c65526573747269637465644644543a20494e56414c49445f46554e44535f544f4b454e5f414444524553534163636f756e7420746f2062652072656d6f7665642066726f6d2061646d696e206c697374206973206e6f7420616c726561647920616e2061646d696e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546756e6473446973747269627574696f6e546f6b656e2e5f6469737472696275746546756e64733a20535550504c595f49535f5a45524f43616c6c696e67206163636f756e74206973206e6f7420616e2061646d696e6973747261746f722e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645265737472696374696f6e732061726520616c72656164792064697361626c65642e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546865207472616e736665722077617320726573747269637465642064756520746f207768697465206c69737420636f6e66696775726174696f6e2e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f53696d706c65526573747269637465644644542e776974686472617746756e64733a205452414e534645525f4641494c45444163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696ea2646970667358221220f4fa8ca1d2aa4e032f2b5c50bb888236f95f34750bf819cd0772571934d4be3564736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102735760003560e01c806370a0823111610151578063a457c2d7116100c3578063d4ce141511610087578063d4ce141514610910578063dce306ad14610946578063dd62ed3e1461094e578063e7984d171461097c578063e959450814610984578063f2fde38b146109ac57610273565b8063a457c2d714610763578063a9059cbb1461078f578063a9691f3f146107bb578063c8934462146107c3578063c9aba0aa146107cb57610273565b80638da5cb5b116101155780638da5cb5b146106cb57806392e6d68b146106d35780639437e2fe146106f957806395d89b411461072757806397af67441461072f5780639dc29fac1461073757610273565b806370a0823114610631578063715018a61461065757806376be15851461065f5780637f4ab1dd146106855780638ab1d681146106a557610273565b80632a642407116101ea578063443bb293116101ae578063443bb293146104f057806345f634f21461051657806346c162de146105b95780634e97415f146105c157806363f04b15146105e7578063704802751461060b57610273565b80632a64240714610456578063313ce5671461045e57806339509351146104665780633973b5961461049257806340c10f19146104c457610273565b80630e969a051161023c5780630e969a05146103c45780631785f53c146103e257806318160ddd146104085780631fb45ec01461041057806323b872dd1461041857806324600fc31461044e57610273565b806241c52c146102785780630263b858146102b057806306fdde03146102e1578063095ea7b31461035e5780630a2eb3011461039e575b600080fd5b61029e6004803603602081101561028e57600080fd5b50356001600160a01b03166109d2565b60408051918252519081900360200190f35b6102df600480360360408110156102c657600080fd5b5080356001600160a01b0316906020013560ff166109f1565b005b6102e9610b35565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038a6004803603604081101561037457600080fd5b506001600160a01b038135169060200135610bcc565b604080519115158252519081900360200190f35b61038a600480360360208110156103b457600080fd5b50356001600160a01b0316610bea565b6103cc610c08565b6040805160ff9092168252519081900360200190f35b6102df600480360360208110156103f857600080fd5b50356001600160a01b0316610c0d565b61029e610d0c565b6103cc610d12565b61038a6004803603606081101561042e57600080fd5b506001600160a01b03813581169160208101359091169060400135610d17565b6102df610dda565b61038a610de5565b6103cc610dee565b61038a6004803603604081101561047c57600080fd5b506001600160a01b038135169060200135610df7565b6102df600480360360608110156104a857600080fd5b5060ff8135811691602081013590911690604001351515610e50565b61038a600480360360408110156104da57600080fd5b506001600160a01b038135169060200135610f0d565b61029e6004803603602081101561050657600080fd5b50356001600160a01b0316610f71565b6102df6004803603602081101561052c57600080fd5b81019060208101813564010000000081111561054757600080fd5b82018360208201111561055957600080fd5b8035906020019184602083028401116401000000008311171561057b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fa3945050505050565b6102df610fd7565b61029e600480360360208110156105d757600080fd5b50356001600160a01b0316611000565b6105ef611069565b604080516001600160a01b039092168252519081900360200190f35b6102df6004803603602081101561062157600080fd5b50356001600160a01b031661107d565b61029e6004803603602081101561064757600080fd5b50356001600160a01b031661117b565b6102df611196565b61038a6004803603602081101561067557600080fd5b50356001600160a01b0316611238565b6102e96004803603602081101561069b57600080fd5b503560ff1661124d565b6102df600480360360208110156106bb57600080fd5b50356001600160a01b03166112d5565b6105ef611370565b6103cc600480360360208110156106e957600080fd5b50356001600160a01b031661137f565b61038a6004803603604081101561070f57600080fd5b506001600160a01b0381358116916020013516611394565b6102e9611406565b6102e9611467565b61038a6004803603604081101561074d57600080fd5b506001600160a01b038135169060200135611495565b61038a6004803603604081101561077957600080fd5b506001600160a01b0381351690602001356114f9565b61038a600480360360408110156107a557600080fd5b506001600160a01b038135169060200135611567565b61029e6115eb565b6102e96115f1565b6102df600480360360a08110156107e157600080fd5b8101906020810181356401000000008111156107fc57600080fd5b82018360208201111561080e57600080fd5b8035906020019184600183028401116401000000008311171561083057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460018302840111640100000000831117156108b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260400135915061160d9050565b6103cc6004803603606081101561092657600080fd5b506001600160a01b0381358116916020810135909116906040013561173e565b6102df61179e565b61029e6004803603604081101561096457600080fd5b506001600160a01b038135811691602001351661186e565b6102e9611899565b61038a6004803603604081101561099a57600080fd5b5060ff813581169160200135166118bc565b6102df600480360360208110156109c257600080fd5b50356001600160a01b03166118dc565b6001600160a01b0381166000908152609960205260409020545b919050565b6109fa33610bea565b610a355760405162461bcd60e51b8152600401808060200182810382526028815260200180612a946028913960400191505060405180910390fd5b60ff8116610a8a576040805162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077686974656c69737420494420737570706c696564000000604482015290519081900360640190fd5b6001600160a01b038216600090815260cd60205260409020805460ff83811660ff19831617909255168015610af557604051339060ff8316906001600160a01b038616907fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e90600090a45b604051339060ff8416906001600160a01b038616907fca6d1e885708b837a7647aeb7f4163ee4ca96058e08ac767be8d23c972c5027090600090a4505050565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b820191906000526020600020905b815481529060010190602001808311610ba457829003601f168201915b505050505090505b90565b6000610be0610bd96119d5565b84846119d9565b5060015b92915050565b6001600160a01b0316600090815260cc602052604090205460ff1690565b600081565b610c156119d5565b609a546001600160a01b03908116911614610c65576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161515600114610cc15760405162461bcd60e51b815260040180806020018281038252603d8152602001806129fa603d913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055513392917fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce91a350565b60675490565b600181565b60008383836000610d2984848461173e565b905060ff811615610d398261124d565b90610dc25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d87578181015183820152602001610d6f565b50505050905090810190601f168015610db45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610dce888888611ac5565b98975050505050505050565b610de333611b4d565b565b60cf5460ff1690565b606a5460ff1690565b6000610be0610e046119d5565b84610e4b8560666000610e156119d5565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611c2916565b6119d9565b610e5933610bea565b610e945760405162461bcd60e51b8152600401808060200182810382526028815260200180612a946028913960400191505060405180910390fd5b60ff838116600081815260ce6020908152604080832087861680855290835292819020805487151560ff1982168117909255825196168015158752928601528051919492939233927fb0353d563a9aa5231878c83727dc723a3cb8a38c2917f8ac2b777aa564c8a0d5929181900390910190a450505050565b6000610f176119d5565b609a546001600160a01b03908116911614610f67576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b610be08383611c83565b6001600160a01b038116600090815260996020526040812054610be490610f9784611000565b9063ffffffff611ced16565b60005b8151811015610fd357610fcb828281518110610fbe57fe5b6020026020010151611b4d565b600101610fa6565b5050565b6000610fe1611d2f565b90506000811315610ffd57610ffd610ff882611dca565b611ddd565b50565b6001600160a01b038116600090815260986020526040812054600160801b9061105b906110569061104a6110456110368861117b565b6097549063ffffffff611e9c16565b611ef5565b9063ffffffff611f0516565b611dca565b8161106257fe5b0492915050565b60cf5461010090046001600160a01b031681565b6110856119d5565b609a546001600160a01b039081169116146110d5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260cc602052604090205460ff161561112d5760405162461bcd60e51b8152600401808060200182810382526035815260200180612c726035913960400191505060405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055513392917fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b91a350565b6001600160a01b031660009081526065602052604090205490565b61119e6119d5565b609a546001600160a01b039081169116146111ee576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609a80546001600160a01b0319169055565b60cc6020526000908152604090205460ff1681565b606060ff821661127b57506040805180820190915260078152665355434345535360c81b60208201526109ec565b60ff8216600114156112a7576040518060600160405280603c8152602001612bdf603c913990506109ec565b5050604080518082019091526012815271556e6b6e6f776e204572726f7220436f646560701b602082015290565b6112de33610bea565b6113195760405162461bcd60e51b8152600401808060200182810382526028815260200180612a946028913960400191505060405180910390fd5b6001600160a01b038116600081815260cd6020526040808220805460ff198116909155905160ff90911692339284927fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e9190a45050565b609a546001600160a01b031690565b60cd6020526000908152604090205460ff1681565b6001600160a01b03808316600090815260cd6020526040808220549284168252812054909160ff90811691168115806113ce575060ff8116155b156113de57600092505050610be4565b60ff918216600090815260ce6020908152604080832093851683529290522054169392505050565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bc15780601f10610b9657610100808354040283529160200191610bc1565b60405180604001604052806012815260200171556e6b6e6f776e204572726f7220436f646560701b81525081565b600061149f6119d5565b609a546001600160a01b039081169116146114ef576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b610be08383611f38565b6000610be06115066119d5565b84610e4b85604051806060016040528060258152602001612c1b60259139606660006115306119d5565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611f8216565b6000338383600061157984848461173e565b905060ff8116156115898261124d565b906115d55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b506115e08787611fdc565b979650505050505050565b60d05481565b6040518060600160405280603c8152602001612bdf603c913981565b600054610100900460ff16806116265750611626611ff0565b80611634575060005460ff16155b61166f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff1615801561169a576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0384166116df5760405162461bcd60e51b81526004018080602001828103825260308152602001806129ca6030913960400191505060405180910390fd5b6116e98686611ff6565b6116f16120ab565b60cf8054610100600160a81b0319166101006001600160a01b0387160217905561171a836118dc565b6117248383611c83565b8015611736576000805461ff00191690555b505050505050565b6000611748610de5565b61175457506000611797565b61175c611370565b6001600160a01b0316846001600160a01b0316141561177d57506000611797565b6117878484611394565b61179357506001611797565b5060005b9392505050565b6117a66119d5565b609a546001600160a01b039081169116146117f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b60cf5460ff166118375760405162461bcd60e51b8152600401808060200182810382526022815260200180612b536022913960400191505060405180910390fd5b60cf805460ff1916905560405133907f3c13a557aa89734e312c348465096b4ddc97709822675c45090f4e2a8d6c4f2b90600090a2565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b604051806040016040528060078152602001665355434345535360c81b81525081565b60ce60209081526000928352604080842090915290825290205460ff1681565b6118e46119d5565b609a546001600160a01b03908116911614611934576040805162461bcd60e51b81526020600482018190526024820152600080516020612b05833981519152604482015290519081900360640190fd5b6001600160a01b0381166119795760405162461bcd60e51b81526004018080602001828103825260268152602001806129826026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316611a1e5760405162461bcd60e51b8152600401808060200182810382526024815260200180612bbb6024913960400191505060405180910390fd5b6001600160a01b038216611a635760405162461bcd60e51b81526004018080602001828103825260228152602001806129a86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611ad284848461215c565b611b4384611ade6119d5565b610e4b85604051806060016040528060288152602001612add602891396001600160a01b038a16600090815260666020526040812090611b1c6119d5565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611f8216565b5060019392505050565b6000611b5882612204565b60cf546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151939450610100909204169163a9059cbb916044808201926020929091908290030181600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b505050506040513d6020811015611bdf57600080fd5b5051611c1c5760405162461bcd60e51b8152600401808060200182810382526032815260200180612c406032913960400191505060405180910390fd5b611c24611d2f565b505050565b600082820183811015611797576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611c8d8282612294565b611ccd611ca861104583609754611e9c90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff61239216565b6001600160a01b0390921660009081526098602052604090209190915550565b600061179783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f82565b60d05460cf54604080516370a0823160e01b815230600482015290516000939261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d8357600080fd5b505afa158015611d97573d6000803e3d6000fd5b505050506040513d6020811015611dad57600080fd5b505160d0819055611dc4908263ffffffff61239216565b91505090565b600080821215611dd957600080fd5b5090565b6000611de7610d0c565b11611e235760405162461bcd60e51b8152600401808060200182810382526037815260200180612a5d6037913960400191505060405180910390fd5b8015610ffd57611e60611e34610d0c565b611e4883600160801b63ffffffff611e9c16565b81611e4f57fe5b60975491900463ffffffff611c2916565b60975560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a250565b600082611eab57506000610be4565b82820282848281611eb857fe5b04146117975760405162461bcd60e51b8152600401808060200182810382526021815260200180612abc6021913960400191505060405180910390fd5b60008181811215610be457600080fd5b6000828201818312801590611f1a5750838112155b80611f2f5750600083128015611f2f57508381125b61179757600080fd5b611f4282826123cc565b611ccd611f5d61104583609754611e9c90919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff611f0516565b60008184841115611fd45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610d87578181015183820152602001610d6f565b505050900390565b6000610be0611fe96119d5565b848461215c565b303b1590565b600054610100900460ff168061200f575061200f611ff0565b8061201d575060005460ff16155b6120585760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612083576000805460ff1961ff0019909116610100171660011790555b61208b6124d4565b6120958383612574565b8015611c24576000805461ff0019169055505050565b600054610100900460ff16806120c457506120c4611ff0565b806120d2575060005460ff16155b61210d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612138576000805460ff1961ff0019909116610100171660011790555b6121406124d4565b61214861264c565b8015610ffd576000805461ff001916905550565b612167838383612745565b600061218161104583609754611e9c90919063ffffffff16565b6001600160a01b0385166000908152609860205260409020549091506121ad908263ffffffff611f0516565b6001600160a01b0380861660009081526098602052604080822093909355908516815220546121e2908263ffffffff61239216565b6001600160a01b03909316600090815260986020526040902092909255505050565b60008061221083610f71565b6001600160a01b03841660009081526099602052604090205490915061223c908263ffffffff611c2916565b6001600160a01b038416600081815260996020908152604091829020939093558051848152905191927feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d92918290030190a292915050565b6001600160a01b0382166122ef576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122fb60008383611c24565b60675461230e908263ffffffff611c2916565b6067556001600160a01b03821660009081526065602052604090205461233a908263ffffffff611c2916565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008082121580156123a657508282840313155b806123bd57506000821280156123bd575082828403135b6123c657600080fd5b50900390565b6001600160a01b0382166124115760405162461bcd60e51b8152600401808060200182810382526021815260200180612b756021913960400191505060405180910390fd5b61241d82600083611c24565b61246081604051806060016040528060228152602001612960602291396001600160a01b038516600090815260656020526040902054919063ffffffff611f8216565b6001600160a01b03831660009081526065602052604090205560675461248c908263ffffffff611ced16565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600054610100900460ff16806124ed57506124ed611ff0565b806124fb575060005460ff16155b6125365760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612148576000805460ff1961ff0019909116610100171660011790558015610ffd576000805461ff001916905550565b600054610100900460ff168061258d575061258d611ff0565b8061259b575060005460ff16155b6125d65760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff16158015612601576000805460ff1961ff0019909116610100171660011790555b82516126149060689060208601906128ae565b5081516126289060699060208501906128ae565b50606a805460ff191660121790558015611c24576000805461ff0019169055505050565b600054610100900460ff16806126655750612665611ff0565b80612673575060005460ff16155b6126ae5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b25602e913960400191505060405180910390fd5b600054610100900460ff161580156126d9576000805460ff1961ff0019909116610100171660011790555b60006126e36119d5565b609a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ffd576000805461ff001916905550565b6001600160a01b03831661278a5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b966025913960400191505060405180910390fd5b6001600160a01b0382166127cf5760405162461bcd60e51b815260040180806020018281038252602381526020018061293d6023913960400191505060405180910390fd5b6127da838383611c24565b61281d81604051806060016040528060268152602001612a37602691396001600160a01b038616600090815260656020526040902054919063ffffffff611f8216565b6001600160a01b038085166000908152606560205260408082209390935590841681522054612852908263ffffffff611c2916565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128ef57805160ff191683800117855561291c565b8280016001018555821561291c579182015b8281111561291c578251825591602001919060010190612901565b50611dd992610bc99250905b80821115611dd9576000815560010161292856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737353696d706c65526573747269637465644644543a20494e56414c49445f46554e44535f544f4b454e5f414444524553534163636f756e7420746f2062652072656d6f7665642066726f6d2061646d696e206c697374206973206e6f7420616c726561647920616e2061646d696e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546756e6473446973747269627574696f6e546f6b656e2e5f6469737472696275746546756e64733a20535550504c595f49535f5a45524f43616c6c696e67206163636f756e74206973206e6f7420616e2061646d696e6973747261746f722e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645265737472696374696f6e732061726520616c72656164792064697361626c65642e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546865207472616e736665722077617320726573747269637465642064756520746f207768697465206c69737420636f6e66696775726174696f6e2e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f53696d706c65526573747269637465644644542e776974686472617746756e64733a205452414e534645525f4641494c45444163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696ea2646970667358221220f4fa8ca1d2aa4e032f2b5c50bb888236f95f34750bf819cd0772571934d4be3564736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
