{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenFacet",
  "sourceName": "contracts/core/connext/facets/TokenFacet.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AssetLogic__getConfig_notRegistered",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__nonReentrant_reentrantCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BaseConnextFacet__whenNotPaused_paused",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__addAssetId_alreadyAdded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__addAssetId_badBurn",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__addAssetId_badMint",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__removeAssetId_invalidParams",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__removeAssetId_notAdded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__removeAssetId_remainsCustodied",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__setLiquidityCap_notCanonicalDomain",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__setupAsset_representationListed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__updateDetails_localNotFound",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__updateDetails_notApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenFacet__updateDetails_onlyRemote",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "canonicalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "adoptedAsset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "localAsset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "AssetAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "AssetRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "canonicalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cap",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "LiquidityCapUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "canonicalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "swapPool",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "StableSwapAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "representation",
          "type": "address"
        }
      ],
      "name": "TokenDeployed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "_stableSwapPool",
          "type": "address"
        }
      ],
      "name": "addStableSwapPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_adopted",
          "type": "address"
        }
      ],
      "name": "adoptedToCanonical",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        }
      ],
      "name": "adoptedToLocalExternalPools",
      "outputs": [
        {
          "internalType": "contract IStableSwap",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "adoptedToLocalExternalPools",
      "outputs": [
        {
          "internalType": "contract IStableSwap",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "approvedAssets",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        }
      ],
      "name": "approvedAssets",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "canonicalToAdopted",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        }
      ],
      "name": "canonicalToAdopted",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "canonicalToRepresentation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        }
      ],
      "name": "canonicalToRepresentation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "getCustodiedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        }
      ],
      "name": "getLocalAndAdoptedToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_candidate",
          "type": "address"
        }
      ],
      "name": "getTokenId",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "_adoptedAssetId",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_representation",
          "type": "address"
        }
      ],
      "name": "removeAssetId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_adoptedAssetId",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_representation",
          "type": "address"
        }
      ],
      "name": "removeAssetId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_representation",
          "type": "address"
        }
      ],
      "name": "representationToCanonical",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        },
        {
          "internalType": "uint8",
          "name": "_canonicalDecimals",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "_representationName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_representationSymbol",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_adoptedAssetId",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stableSwapPool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_cap",
          "type": "uint256"
        }
      ],
      "name": "setupAsset",
      "outputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "_representation",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_adoptedAssetId",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stableSwapPool",
          "type": "address"
        }
      ],
      "name": "setupAssetWithDeployedRepresentation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        }
      ],
      "name": "updateDetails",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "domain",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "internalType": "struct TokenId",
          "name": "_canonical",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "_updated",
          "type": "uint256"
        }
      ],
      "name": "updateLiquidityCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50613a2d806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001455760003560e01c80639b59851911620000bb578063bd8671a7116200007a578063bd8671a714620003ff578063c40584291462000416578063e1cb3958146200042d578063e9d7bcec1462000444578063f1537686146200045b57600080fd5b80639b5985191462000374578063a1b1930114620003a3578063ad4c777114620003ba578063ae8bc0de14620003d1578063b64a5e0714620003e857600080fd5b806357bd0a32116200010857806357bd0a32146200026c5780635a2164e514620002ad5780636006209114620002c457806380dc22481462000328578063949de969146200033f57600080fd5b806303e418c2146200014a57806307a38d7b14620001d45780631506e463146200020c5780631ecf6f9f14620002255780632c1999d01462000255575b600080fd5b620001ae6200015b36600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260066020818152938220805463ffffffff168652929091528252600101549082015290565b60408051825163ffffffff16815260209283015192810192909252015b60405180910390f35b620001eb620001e536600462001abc565b62000472565b604080516001600160a01b03938416815292909116602083015201620001cb565b620002236200021d36600462001b04565b62000498565b005b6200023c6200023636600462001b34565b62000534565b6040516001600160a01b039091168152602001620001cb565b6200023c6200026636600462001b34565b62000547565b6200029c6200027d36600462001b34565b600090815260076020526040902060020154600160a01b900460ff1690565b6040519015158152602001620001cb565b62000223620002be36600462001b4e565b62000554565b620001ae620002d536600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260056020818152938220805463ffffffff168652929091528252600101549082015290565b6200023c6200033936600462001b99565b620005fc565b620003656200035036600462001b34565b60009081526007602052604090206004015490565b604051908152602001620001cb565b6200023c6200038536600462001b34565b6000908152600760205260409020600201546001600160a01b031690565b62000223620003b436600462001bb8565b62000619565b6200023c620003cb36600462001b99565b620006c6565b6200029c620003e236600462001b99565b620006e9565b6200023c620003f936600462001cae565b62000706565b6200023c6200041036600462001b99565b620008d7565b620002236200042736600462001d71565b620008fa565b6200023c6200043e36600462001def565b62000a96565b620002236200045536600462001e4d565b62000c06565b620001ae6200046c36600462001a89565b62000c97565b6000806200048d62000485858562000cb6565b858562000cf9565b915091509250929050565b33620004a362000d2a565b6001600160a01b031614158015620004e2575060033360009081526014602052604090205460ff166003811115620004df57620004df62001e7b565b14155b156200050157604051637b32c26b60e01b815260040160405180910390fd5b600062000520602084018035906200051a908662001e91565b62000cb6565b90506200052f83838362000d58565b505050565b6000620005418262000df3565b92915050565b6000620005418262000e12565b336200055f62000d2a565b6001600160a01b0316141580156200059e575060033360009081526014602052604090205460ff1660038111156200059b576200059b62001e7b565b14155b15620005bd57604051637b32c26b60e01b815260040160405180910390fd5b6000620005d6602085018035906200051a908762001e91565b9050620005f6818484620005f03689900389018962001eaf565b62000e4e565b50505050565b60006200054162000385602084018035906200051a908662001e91565b336200062462000d2a565b6001600160a01b03161415801562000663575060033360009081526014602052604090205460ff16600381111562000660576200066062001e7b565b14155b156200068257604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600560209081526040918290208251808401909352805463ffffffff1683526001015490820152620005f68484848462000e4e565b600062000541620006e3602084018035906200051a908662001e91565b62000df3565b6000620005416200027d602084018035906200051a908662001e91565b6000336200071362000d2a565b6001600160a01b03161415801562000752575060033360009081526014602052604090205460ff1660038111156200074f576200074f62001e7b565b14155b156200077157604051637b32c26b60e01b815260040160405180910390fd5b60006200078a60208a018035906200051a908c62001e91565b60045490915060009063ffffffff16620007a860208c018c62001e91565b63ffffffff161490508015620008385760208a013592506001600160a01b03861615801590620007ea5750826001600160a01b0316866001600160a01b031614155b80620007fe57506001600160a01b03851615155b156200081d5760405163022d833560e01b815260040160405180910390fd5b6200083260018a60008660008f8a89620010cc565b620008ca565b6000828152600760205260409020546001600160a01b0316151580620008755750600082815260076020526040902054600160a01b900460ff1615155b15620008945760405163ae154e0360e01b815260040160405180910390fd5b620008b460208b01803590620008ab908d62001e91565b8b8b8b620016af565b9250620008ca60008a8886898f600089620010cc565b5050979650505050505050565b600062000541620008f4602084018035906200051a908662001e91565b62000e12565b336200090562000d2a565b6001600160a01b03161415801562000944575060033360009081526014602052604090205460ff16600381111562000941576200094162001e7b565b14155b156200096357604051637b32c26b60e01b815260040160405180910390fd5b60006200097c602085018035906200051a908762001e91565b905060006200098b8262001737565b546001600160a01b0316905080620009b657604051639db40a2560e01b815260040160405180910390fd5b620009c5602086018662001e91565b60045463ffffffff918216911603620009f157604051630e5a87cb60e21b815260040160405180910390fd5b600082815260076020526040902060020154600160a01b900460ff1662000a2b57604051634d665d9960e01b815260040160405180910390fd5b604051635bd8487760e11b81526001600160a01b0382169063b7b090ee9062000a5b908790879060040162001f54565b600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b505050505050505050565b60003362000aa362000d2a565b6001600160a01b03161415801562000ae2575060033360009081526014602052604090205460ff16600381111562000adf5762000adf62001e7b565b14155b1562000b0157604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03841662000b2957604051631363580360e21b815260040160405180910390fd5b60045463ffffffff1662000b41602087018762001e91565b63ffffffff160362000b665760405163333de67d60e21b815260040160405180910390fd5b600062000b7f602087018035906200051a908962001e91565b905062000bf96000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec919062001f86565b8688878b600088620010cc565b849150505b949350505050565b3362000c1162000d2a565b6001600160a01b03161415801562000c50575060033360009081526014602052604090205460ff16600381111562000c4d5762000c4d62001e7b565b14155b1562000c6f57604051637b32c26b60e01b815260040160405180910390fd5b600062000c88602084018035906200051a908662001e91565b90506200052f83838362001780565b60408051808201909152600080825260208201526200054182620018be565b6000828260405160200162000cdb92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080600062000d0d8686866000620018df565b9050600062000d1c8762000e12565b919791965090945050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081815260076020908152604090912060020180546001600160a01b0319166001600160a01b03851617905562000d939084018462001e91565b63ffffffff168360200135827f16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56853360405162000de69291906001600160a01b0392831681529116602082015260400190565b60405180910390a4505050565b60008062000e018362001737565b546001600160a01b03169392505050565b60008062000e208362001737565b600101546001600160a01b03169050806200054157604051630558a50760e31b815260040160405180910390fd5b60008481526007602052604090206002810154600160a01b900460ff1662000e8957604051631c999e7d60e11b815260040160405180910390fd5b60018101546001600160a01b03858116911614158062000eb6575080546001600160a01b03848116911614155b1562000ed5576040516318707fc960e31b815260040160405180910390fd5b815160045463ffffffff908116911614801562000f9257600062000efa846020015190565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6b919062001fa6565b111562000f8b5760405163454732f160e11b815260040160405180910390fd5b5062001019565b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff9919062001fa6565b1115620010195760405163454732f160e11b815260040160405180910390fd5b6000868152600760209081526040808320600180820180546001600160a81b0319908116909155600283018054909116905560039091018490556001600160a01b03888116855260068452828520805463ffffffff199081168255908301869055908a16855260058452828520805490911681550192909255905133815287917f9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf910160405180910390a2505050505050565b620010db602084018462001e91565b63ffffffff161580620010f057506020830135155b156200110f576040516375ba0d7960e11b815260040160405180910390fd5b6001600160a01b038616156000816200112957876200112b565b865b905060006200113e602087018762001e91565b60045460008681526007602052604090206002015463ffffffff92831692909116919091149150600160a01b900460ff16156200118e5760405163bfa2bf9b60e01b815260040160405180910390fd5b80620013f3576040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015620011de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001204919062001fa6565b6040516340c10f1960e01b8152306004820152600160248201529091506001600160a01b038316906340c10f1990604401600060405180830381600087803b1580156200125057600080fd5b505af115801562001265573d6000803e3d6000fd5b5050505080600162001278919062001fc0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015620012bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e3919062001fa6565b14620013025760405163016dd8ed60e71b815260040160405180910390fd5b604051632770a7eb60e21b8152306004820152600160248201526001600160a01b03831690639dc29fac90604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03851691506370a0823190602401602060405180830381865afa158015620013ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d1919062001fa6565b14620013f05760405163ad6f16e360e01b815260040160405180910390fd5b50505b6040518061010001604052808c6200140c57896200140f565b60005b6001600160a01b031681526020018b60ff168152602001836001600160a01b0316815260200184620014a657836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200147a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014a0919062001f86565b620014a8565b8b5b60ff90811682526000602080840182905260016040808601829052606080870185905260809687018590528b8552600784529381902087518154898601518816600160a01b9081026001600160a81b03199283166001600160a01b0394851617178455938a01519483018054978b0151909816840296811694821694909417959095179095559486015160028501805460a089015115159097029690921693169290921793909317905560c0830151600382015560e090920151600490920191909155620015799087018762001e91565b6001600160a01b0383166000908152600560209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101558a6200161957620015ca602087018762001e91565b6001600160a01b0389166000908152600660209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101556200161386888662000d58565b6200162d565b84156200162d576200162d86868662001780565b6200163c602087018762001e91565b63ffffffff168660200135857f0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632858c336040516200169a939291906001600160a01b0393841681529183166020830152909116604082015260600190565b60405180910390a45050505050505050505050565b6000838383604051620016c29062001a5e565b620016d09392919062001fe2565b604051809103906000f080158015620016ed573d6000803e3d6000fd5b509050806001600160a01b0316868663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a495945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015620017795760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b6200178f602084018462001e91565b60045463ffffffff908116911614620017bb5760405163a56029bd60e01b815260040160405180910390fd5b600081815260076020526040902060030182905581156200185f57600060208401356040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa15801562001825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184b919062001fa6565b600083815260076020526040902060040155505b6200186e602084018462001e91565b63ffffffff168360200135827f8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4853360405162000de69291909182526001600160a01b0316602082015260400190565b6040805180820190915260008082526020820152620005418260006200191d565b600481015460009063ffffffff908116908416036200190057508262000bfe565b6200190b8562001737565b546001600160a01b0316905062000bfe565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b0384166200195c57905062000541565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215620019a957905062000541565b620019b5848462001a1d565b15620019dd57600483015463ffffffff1681526001600160a01b038416602082015262001779565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6001600160a01b038216600090815260068201602052604081205463ffffffff161562001a4d5750600062000541565b50506001600160a01b03163b151590565b6119d9806200201f83390190565b80356001600160a01b038116811462001a8457600080fd5b919050565b60006020828403121562001a9c57600080fd5b620017798262001a6c565b803563ffffffff8116811462001a8457600080fd5b6000806040838503121562001ad057600080fd5b8235915062001ae26020840162001aa7565b90509250929050565b60006040828403121562001afe57600080fd5b50919050565b6000806060838503121562001b1857600080fd5b62001b24848462001aeb565b915062001ae26040840162001a6c565b60006020828403121562001b4757600080fd5b5035919050565b60008060006080848603121562001b6457600080fd5b62001b70858562001aeb565b925062001b806040850162001a6c565b915062001b906060850162001a6c565b90509250925092565b60006040828403121562001bac57600080fd5b62001779838362001aeb565b60008060006060848603121562001bce57600080fd5b8335925062001be06020850162001a6c565b915062001b906040850162001a6c565b60ff8116811462001c0057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c2b57600080fd5b813567ffffffffffffffff8082111562001c495762001c4962001c03565b604051601f8301601f19908116603f0116810190828211818310171562001c745762001c7462001c03565b8160405283815286602085880101111562001c8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000610100888a03121562001ccb57600080fd5b62001cd7898962001aeb565b9650604088013562001ce98162001bf0565b9550606088013567ffffffffffffffff8082111562001d0757600080fd5b62001d158b838c0162001c19565b965060808a013591508082111562001d2c57600080fd5b5062001d3b8a828b0162001c19565b94505062001d4c60a0890162001a6c565b925062001d5c60c0890162001a6c565b915060e0880135905092959891949750929550565b60008060006080848603121562001d8757600080fd5b62001d93858562001aeb565b9250604084013567ffffffffffffffff8082111562001db157600080fd5b62001dbf8783880162001c19565b9350606086013591508082111562001dd657600080fd5b5062001de58682870162001c19565b9150509250925092565b60008060008060a0858703121562001e0657600080fd5b62001e12868662001aeb565b935062001e226040860162001a6c565b925062001e326060860162001a6c565b915062001e426080860162001a6c565b905092959194509250565b6000806060838503121562001e6157600080fd5b62001e6d848462001aeb565b946040939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562001ea457600080fd5b620017798262001aa7565b60006040828403121562001ec257600080fd5b6040516040810181811067ffffffffffffffff8211171562001ee85762001ee862001c03565b60405262001ef68362001aa7565b8152602083013560208201528091505092915050565b6000815180845260005b8181101562001f345760208185018101518683018201520162001f16565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600062001f69604083018562001f0c565b828103602084015262001f7d818562001f0c565b95945050505050565b60006020828403121562001f9957600080fd5b8151620017798162001bf0565b60006020828403121562001fb957600080fd5b5051919050565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b60ff8416815260606020820152600062002000606083018562001f0c565b828103604084015262002014818562001f0c565b969550505050505056fe60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033a2646970667358221220300cc646d0359b86871a6e263ab844429c60311081ebea2afdd51b016410d91c64736f6c63430008110033",
  "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620001455760003560e01c80639b59851911620000bb578063bd8671a7116200007a578063bd8671a714620003ff578063c40584291462000416578063e1cb3958146200042d578063e9d7bcec1462000444578063f1537686146200045b57600080fd5b80639b5985191462000374578063a1b1930114620003a3578063ad4c777114620003ba578063ae8bc0de14620003d1578063b64a5e0714620003e857600080fd5b806357bd0a32116200010857806357bd0a32146200026c5780635a2164e514620002ad5780636006209114620002c457806380dc22481462000328578063949de969146200033f57600080fd5b806303e418c2146200014a57806307a38d7b14620001d45780631506e463146200020c5780631ecf6f9f14620002255780632c1999d01462000255575b600080fd5b620001ae6200015b36600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260066020818152938220805463ffffffff168652929091528252600101549082015290565b60408051825163ffffffff16815260209283015192810192909252015b60405180910390f35b620001eb620001e536600462001abc565b62000472565b604080516001600160a01b03938416815292909116602083015201620001cb565b620002236200021d36600462001b04565b62000498565b005b6200023c6200023636600462001b34565b62000534565b6040516001600160a01b039091168152602001620001cb565b6200023c6200026636600462001b34565b62000547565b6200029c6200027d36600462001b34565b600090815260076020526040902060020154600160a01b900460ff1690565b6040519015158152602001620001cb565b62000223620002be36600462001b4e565b62000554565b620001ae620002d536600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260056020818152938220805463ffffffff168652929091528252600101549082015290565b6200023c6200033936600462001b99565b620005fc565b620003656200035036600462001b34565b60009081526007602052604090206004015490565b604051908152602001620001cb565b6200023c6200038536600462001b34565b6000908152600760205260409020600201546001600160a01b031690565b62000223620003b436600462001bb8565b62000619565b6200023c620003cb36600462001b99565b620006c6565b6200029c620003e236600462001b99565b620006e9565b6200023c620003f936600462001cae565b62000706565b6200023c6200041036600462001b99565b620008d7565b620002236200042736600462001d71565b620008fa565b6200023c6200043e36600462001def565b62000a96565b620002236200045536600462001e4d565b62000c06565b620001ae6200046c36600462001a89565b62000c97565b6000806200048d62000485858562000cb6565b858562000cf9565b915091509250929050565b33620004a362000d2a565b6001600160a01b031614158015620004e2575060033360009081526014602052604090205460ff166003811115620004df57620004df62001e7b565b14155b156200050157604051637b32c26b60e01b815260040160405180910390fd5b600062000520602084018035906200051a908662001e91565b62000cb6565b90506200052f83838362000d58565b505050565b6000620005418262000df3565b92915050565b6000620005418262000e12565b336200055f62000d2a565b6001600160a01b0316141580156200059e575060033360009081526014602052604090205460ff1660038111156200059b576200059b62001e7b565b14155b15620005bd57604051637b32c26b60e01b815260040160405180910390fd5b6000620005d6602085018035906200051a908762001e91565b9050620005f6818484620005f03689900389018962001eaf565b62000e4e565b50505050565b60006200054162000385602084018035906200051a908662001e91565b336200062462000d2a565b6001600160a01b03161415801562000663575060033360009081526014602052604090205460ff16600381111562000660576200066062001e7b565b14155b156200068257604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600560209081526040918290208251808401909352805463ffffffff1683526001015490820152620005f68484848462000e4e565b600062000541620006e3602084018035906200051a908662001e91565b62000df3565b6000620005416200027d602084018035906200051a908662001e91565b6000336200071362000d2a565b6001600160a01b03161415801562000752575060033360009081526014602052604090205460ff1660038111156200074f576200074f62001e7b565b14155b156200077157604051637b32c26b60e01b815260040160405180910390fd5b60006200078a60208a018035906200051a908c62001e91565b60045490915060009063ffffffff16620007a860208c018c62001e91565b63ffffffff161490508015620008385760208a013592506001600160a01b03861615801590620007ea5750826001600160a01b0316866001600160a01b031614155b80620007fe57506001600160a01b03851615155b156200081d5760405163022d833560e01b815260040160405180910390fd5b6200083260018a60008660008f8a89620010cc565b620008ca565b6000828152600760205260409020546001600160a01b0316151580620008755750600082815260076020526040902054600160a01b900460ff1615155b15620008945760405163ae154e0360e01b815260040160405180910390fd5b620008b460208b01803590620008ab908d62001e91565b8b8b8b620016af565b9250620008ca60008a8886898f600089620010cc565b5050979650505050505050565b600062000541620008f4602084018035906200051a908662001e91565b62000e12565b336200090562000d2a565b6001600160a01b03161415801562000944575060033360009081526014602052604090205460ff16600381111562000941576200094162001e7b565b14155b156200096357604051637b32c26b60e01b815260040160405180910390fd5b60006200097c602085018035906200051a908762001e91565b905060006200098b8262001737565b546001600160a01b0316905080620009b657604051639db40a2560e01b815260040160405180910390fd5b620009c5602086018662001e91565b60045463ffffffff918216911603620009f157604051630e5a87cb60e21b815260040160405180910390fd5b600082815260076020526040902060020154600160a01b900460ff1662000a2b57604051634d665d9960e01b815260040160405180910390fd5b604051635bd8487760e11b81526001600160a01b0382169063b7b090ee9062000a5b908790879060040162001f54565b600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b505050505050505050565b60003362000aa362000d2a565b6001600160a01b03161415801562000ae2575060033360009081526014602052604090205460ff16600381111562000adf5762000adf62001e7b565b14155b1562000b0157604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03841662000b2957604051631363580360e21b815260040160405180910390fd5b60045463ffffffff1662000b41602087018762001e91565b63ffffffff160362000b665760405163333de67d60e21b815260040160405180910390fd5b600062000b7f602087018035906200051a908962001e91565b905062000bf96000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec919062001f86565b8688878b600088620010cc565b849150505b949350505050565b3362000c1162000d2a565b6001600160a01b03161415801562000c50575060033360009081526014602052604090205460ff16600381111562000c4d5762000c4d62001e7b565b14155b1562000c6f57604051637b32c26b60e01b815260040160405180910390fd5b600062000c88602084018035906200051a908662001e91565b90506200052f83838362001780565b60408051808201909152600080825260208201526200054182620018be565b6000828260405160200162000cdb92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080600062000d0d8686866000620018df565b9050600062000d1c8762000e12565b919791965090945050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081815260076020908152604090912060020180546001600160a01b0319166001600160a01b03851617905562000d939084018462001e91565b63ffffffff168360200135827f16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56853360405162000de69291906001600160a01b0392831681529116602082015260400190565b60405180910390a4505050565b60008062000e018362001737565b546001600160a01b03169392505050565b60008062000e208362001737565b600101546001600160a01b03169050806200054157604051630558a50760e31b815260040160405180910390fd5b60008481526007602052604090206002810154600160a01b900460ff1662000e8957604051631c999e7d60e11b815260040160405180910390fd5b60018101546001600160a01b03858116911614158062000eb6575080546001600160a01b03848116911614155b1562000ed5576040516318707fc960e31b815260040160405180910390fd5b815160045463ffffffff908116911614801562000f9257600062000efa846020015190565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6b919062001fa6565b111562000f8b5760405163454732f160e11b815260040160405180910390fd5b5062001019565b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff9919062001fa6565b1115620010195760405163454732f160e11b815260040160405180910390fd5b6000868152600760209081526040808320600180820180546001600160a81b0319908116909155600283018054909116905560039091018490556001600160a01b03888116855260068452828520805463ffffffff199081168255908301869055908a16855260058452828520805490911681550192909255905133815287917f9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf910160405180910390a2505050505050565b620010db602084018462001e91565b63ffffffff161580620010f057506020830135155b156200110f576040516375ba0d7960e11b815260040160405180910390fd5b6001600160a01b038616156000816200112957876200112b565b865b905060006200113e602087018762001e91565b60045460008681526007602052604090206002015463ffffffff92831692909116919091149150600160a01b900460ff16156200118e5760405163bfa2bf9b60e01b815260040160405180910390fd5b80620013f3576040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015620011de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001204919062001fa6565b6040516340c10f1960e01b8152306004820152600160248201529091506001600160a01b038316906340c10f1990604401600060405180830381600087803b1580156200125057600080fd5b505af115801562001265573d6000803e3d6000fd5b5050505080600162001278919062001fc0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015620012bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e3919062001fa6565b14620013025760405163016dd8ed60e71b815260040160405180910390fd5b604051632770a7eb60e21b8152306004820152600160248201526001600160a01b03831690639dc29fac90604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03851691506370a0823190602401602060405180830381865afa158015620013ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d1919062001fa6565b14620013f05760405163ad6f16e360e01b815260040160405180910390fd5b50505b6040518061010001604052808c6200140c57896200140f565b60005b6001600160a01b031681526020018b60ff168152602001836001600160a01b0316815260200184620014a657836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200147a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014a0919062001f86565b620014a8565b8b5b60ff90811682526000602080840182905260016040808601829052606080870185905260809687018590528b8552600784529381902087518154898601518816600160a01b9081026001600160a81b03199283166001600160a01b0394851617178455938a01519483018054978b0151909816840296811694821694909417959095179095559486015160028501805460a089015115159097029690921693169290921793909317905560c0830151600382015560e090920151600490920191909155620015799087018762001e91565b6001600160a01b0383166000908152600560209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101558a6200161957620015ca602087018762001e91565b6001600160a01b0389166000908152600660209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101556200161386888662000d58565b6200162d565b84156200162d576200162d86868662001780565b6200163c602087018762001e91565b63ffffffff168660200135857f0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632858c336040516200169a939291906001600160a01b0393841681529183166020830152909116604082015260600190565b60405180910390a45050505050505050505050565b6000838383604051620016c29062001a5e565b620016d09392919062001fe2565b604051809103906000f080158015620016ed573d6000803e3d6000fd5b509050806001600160a01b0316868663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a495945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015620017795760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b6200178f602084018462001e91565b60045463ffffffff908116911614620017bb5760405163a56029bd60e01b815260040160405180910390fd5b600081815260076020526040902060030182905581156200185f57600060208401356040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa15801562001825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184b919062001fa6565b600083815260076020526040902060040155505b6200186e602084018462001e91565b63ffffffff168360200135827f8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4853360405162000de69291909182526001600160a01b0316602082015260400190565b6040805180820190915260008082526020820152620005418260006200191d565b600481015460009063ffffffff908116908416036200190057508262000bfe565b6200190b8562001737565b546001600160a01b0316905062000bfe565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b0384166200195c57905062000541565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215620019a957905062000541565b620019b5848462001a1d565b15620019dd57600483015463ffffffff1681526001600160a01b038416602082015262001779565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6001600160a01b038216600090815260068201602052604081205463ffffffff161562001a4d5750600062000541565b50506001600160a01b03163b151590565b6119d9806200201f83390190565b80356001600160a01b038116811462001a8457600080fd5b919050565b60006020828403121562001a9c57600080fd5b620017798262001a6c565b803563ffffffff8116811462001a8457600080fd5b6000806040838503121562001ad057600080fd5b8235915062001ae26020840162001aa7565b90509250929050565b60006040828403121562001afe57600080fd5b50919050565b6000806060838503121562001b1857600080fd5b62001b24848462001aeb565b915062001ae26040840162001a6c565b60006020828403121562001b4757600080fd5b5035919050565b60008060006080848603121562001b6457600080fd5b62001b70858562001aeb565b925062001b806040850162001a6c565b915062001b906060850162001a6c565b90509250925092565b60006040828403121562001bac57600080fd5b62001779838362001aeb565b60008060006060848603121562001bce57600080fd5b8335925062001be06020850162001a6c565b915062001b906040850162001a6c565b60ff8116811462001c0057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c2b57600080fd5b813567ffffffffffffffff8082111562001c495762001c4962001c03565b604051601f8301601f19908116603f0116810190828211818310171562001c745762001c7462001c03565b8160405283815286602085880101111562001c8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000610100888a03121562001ccb57600080fd5b62001cd7898962001aeb565b9650604088013562001ce98162001bf0565b9550606088013567ffffffffffffffff8082111562001d0757600080fd5b62001d158b838c0162001c19565b965060808a013591508082111562001d2c57600080fd5b5062001d3b8a828b0162001c19565b94505062001d4c60a0890162001a6c565b925062001d5c60c0890162001a6c565b915060e0880135905092959891949750929550565b60008060006080848603121562001d8757600080fd5b62001d93858562001aeb565b9250604084013567ffffffffffffffff8082111562001db157600080fd5b62001dbf8783880162001c19565b9350606086013591508082111562001dd657600080fd5b5062001de58682870162001c19565b9150509250925092565b60008060008060a0858703121562001e0657600080fd5b62001e12868662001aeb565b935062001e226040860162001a6c565b925062001e326060860162001a6c565b915062001e426080860162001a6c565b905092959194509250565b6000806060838503121562001e6157600080fd5b62001e6d848462001aeb565b946040939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562001ea457600080fd5b620017798262001aa7565b60006040828403121562001ec257600080fd5b6040516040810181811067ffffffffffffffff8211171562001ee85762001ee862001c03565b60405262001ef68362001aa7565b8152602083013560208201528091505092915050565b6000815180845260005b8181101562001f345760208185018101518683018201520162001f16565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600062001f69604083018562001f0c565b828103602084015262001f7d818562001f0c565b95945050505050565b60006020828403121562001f9957600080fd5b8151620017798162001bf0565b60006020828403121562001fb957600080fd5b5051919050565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b60ff8416815260606020820152600062002000606083018562001f0c565b828103604084015262002014818562001f0c565b969550505050505056fe60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033a2646970667358221220300cc646d0359b86871a6e263ab844429c60311081ebea2afdd51b016410d91c64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
