UNPKG

@tatumio/tatum-v1

Version:

Tatum API client allows browsers and Node.js clients to interact with Tatum API.

367 lines 44.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const blockchain_1 = require("../../blockchain"); const marketplace_1 = require("../../contracts/marketplace"); const model_1 = require("../../model"); const transaction_1 = require("../../transaction"); const nft_1 = require("../nft"); const auction_1 = require("./auction"); const sleep = async (time = 7000) => new Promise(r => setTimeout(r, time)); describe('Auction tests', () => { jest.setTimeout(99999); describe('Auction CELO transactions', () => { const tokenId = `${Date.now()}`; it('should deploy auction', async () => { const body = new model_1.DeployNftAuction(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.feeRecipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.auctionFee = 150; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; const test = await auction_1.deployAuction(true, body, 'https://alfajores-forno.celo-testnet.org'); console.log(test); expect(test).toBeDefined(); }); it('should not deploy auction - wrong validation', async () => { const body = new model_1.DeployNftAuction(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.feeRecipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.auctionFee = 150.1; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; await auction_1.deployAuction(true, body, 'https://alfajores-forno.celo-testnet.org'); }); it('should not create auction - wrong validation', async () => { const body = new model_1.CreateAuction(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.amount = '0.2'; body.nftAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD'; body.contractAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD'; body.endedAt = 123456789; body.tokenId = tokenId; body.id = tokenId; body.isErc721 = false; body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; await auction_1.sendAuctionCreate(true, body, 'https://alfajores-forno.celo-testnet.org'); }); it('should create auction native asset', async () => { const mint = new model_1.CeloMintErc721(); mint.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; mint.to = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; mint.contractAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD'; mint.tokenId = tokenId; mint.url = 'https://google.com'; mint.feeCurrency = model_1.Currency.CUSD; mint.chain = model_1.Currency.CELO; console.log(await nft_1.mintNFTWithUri(true, mint, 'https://alfajores-forno.celo-testnet.org')); await sleep(); console.log(await auction_1.sendAuctionApproveNftTransfer(true, { fromPrivateKey: '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236', chain: model_1.Currency.CELO, contractAddress: '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD', isErc721: true, spender: '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038', tokenId }, 'https://alfajores-forno.celo-testnet.org')); await sleep(); const endedAt = (await blockchain_1.celoGetCurrentBlock()) + 9; const body = new model_1.CreateAuction(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; body.nftAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD'; body.endedAt = endedAt; body.tokenId = tokenId; body.id = tokenId; body.isErc721 = true; body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; console.log(await auction_1.sendAuctionCreate(true, body, 'https://alfajores-forno.celo-testnet.org')); await sleep(); const bid = new model_1.InvokeAuctionOperation(); bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; bid.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; bid.id = tokenId; bid.bidValue = '0.001015'; bid.feeCurrency = model_1.Currency.CELO; bid.chain = model_1.Currency.CELO; console.log(await auction_1.sendAuctionBid(true, bid, 'https://alfajores-forno.celo-testnet.org')); await sleep(35000); const settle = new model_1.InvokeAuctionOperation(); settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; settle.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; settle.id = tokenId; settle.feeCurrency = model_1.Currency.CUSD; settle.chain = model_1.Currency.CELO; console.log(await auction_1.sendAuctionSettle(true, settle, 'https://alfajores-forno.celo-testnet.org')); }); it('should create auction erc20 asset', async () => { const mint = new model_1.CeloMintErc721(); mint.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; mint.to = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; mint.contractAddress = '0xdf82c2f74aa7b629bda65b1cfd258248c9c2b7d3'; mint.tokenId = tokenId; mint.url = 'https://google.com'; mint.feeCurrency = model_1.Currency.CUSD; mint.chain = model_1.Currency.CELO; console.log(await nft_1.mintNFTWithUri(true, mint, 'https://alfajores-forno.celo-testnet.org')); await sleep(); console.log(await auction_1.sendAuctionApproveNftTransfer(true, { fromPrivateKey: '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236', chain: model_1.Currency.CELO, contractAddress: '0xdf82c2f74aa7b629bda65b1cfd258248c9c2b7d3', isErc721: true, spender: '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038', tokenId }, 'https://alfajores-forno.celo-testnet.org')); await sleep(); const endedAt = (await blockchain_1.celoGetCurrentBlock()) + 7; const body = new model_1.CreateAuction(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; body.nftAddress = '0xdf82c2f74aa7b629bda65b1cfd258248c9c2b7d3'; body.tokenId = tokenId; body.id = `${tokenId}1`; body.endedAt = endedAt; body.isErc721 = true; body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; body.erc20Address = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; console.log(await auction_1.sendAuctionCreate(true, body, 'https://alfajores-forno.celo-testnet.org')); const approve = new model_1.ApproveErc20(); approve.contractAddress = '0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1'; approve.spender = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; approve.chain = model_1.Currency.CELO; approve.feeCurrency = model_1.Currency.CELO; approve.amount = '0.001015'; approve.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; approve.fee = { gasPrice: '5', gasLimit: '300000' }; console.log(await auction_1.sendAuctionApproveErc20Transfer(true, approve, 'https://alfajores-forno.celo-testnet.org')); await sleep(); const bid = new model_1.InvokeAuctionOperation(); bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; bid.contractAddress = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; bid.id = `${tokenId}1`; bid.bidValue = '0.001015'; bid.feeCurrency = model_1.Currency.CELO; bid.chain = model_1.Currency.CELO; bid.fee = { gasPrice: '5', gasLimit: '300000' }; console.log(await auction_1.sendAuctionBid(true, bid, 'https://alfajores-forno.celo-testnet.org')); await sleep(20000); const settle = new model_1.InvokeAuctionOperation(); settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; settle.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; settle.id = tokenId; settle.feeCurrency = model_1.Currency.CUSD; settle.chain = model_1.Currency.CELO; console.log(await auction_1.sendAuctionSettle(true, settle, 'https://alfajores-forno.celo-testnet.org')); }); it('should get auction', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; r.methodName = 'get'; r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName); r.params = [tokenId]; console.log(await transaction_1.sendCeloSmartContractReadMethodInvocationTransaction(true, r, 'https://alfajores-forno.celo-testnet.org')); }); it('should get auction fee', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038'; r.methodName = 'getAuctionFee'; r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName); r.params = []; console.log(await transaction_1.sendCeloSmartContractReadMethodInvocationTransaction(true, r, 'https://alfajores-forno.celo-testnet.org')); }); }); describe('Auction BSC transactions', () => { const tokenId = `${Date.now()}`; it('should deploy auction', async () => { const body = new model_1.DeployNftAuction(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.feeRecipient = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.auctionFee = 150; body.chain = model_1.Currency.BSC; const test = await auction_1.deployAuction(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545'); console.log(test); expect(test).toBeDefined(); }); it('should create auction native asset', async () => { const mint = new model_1.MintErc721(); mint.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; mint.to = '0x80d8bac9a6901698b3749fe336bbd1385c1f98f2'; mint.contractAddress = '0xada3e67deae341f16b44f67687866d2560d79ec8'; mint.tokenId = tokenId; mint.url = 'https://google.com'; mint.chain = model_1.Currency.BSC; console.log(await nft_1.mintNFTWithUri(true, mint, 'https://data-seed-prebsc-2-s1.binance.org:8545')); await sleep(); console.log(await auction_1.sendAuctionApproveNftTransfer(true, { fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab', chain: model_1.Currency.BSC, contractAddress: '0xada3e67deae341f16b44f67687866d2560d79ec8', isErc721: true, spender: '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad', tokenId }, 'https://data-seed-prebsc-2-s1.binance.org:8545')); await sleep(); const body = new model_1.CreateAuction(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad'; body.nftAddress = '0xada3e67deae341f16b44f67687866d2560d79ec8'; body.tokenId = tokenId; body.endedAt = (await blockchain_1.bscGetCurrentBlock()) + 9; body.id = tokenId; body.isErc721 = true; body.seller = '0x80d8bac9a6901698b3749fe336bbd1385c1f98f2'; body.chain = model_1.Currency.BSC; console.log(await auction_1.sendAuctionCreate(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545')); await sleep(10000); const bid = new model_1.InvokeAuctionOperation(); bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; bid.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad'; bid.id = tokenId; bid.bidValue = '0.001015'; bid.chain = model_1.Currency.BSC; console.log(await auction_1.sendAuctionBid(true, bid, 'https://data-seed-prebsc-2-s1.binance.org:8545')); await sleep(15000); const settle = new model_1.InvokeAuctionOperation(); settle.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; settle.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad'; settle.id = tokenId; settle.chain = model_1.Currency.BSC; console.log(await auction_1.sendAuctionSettle(true, settle, 'https://data-seed-prebsc-2-s1.binance.org:8545')); }); it('should get auction', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad'; r.methodName = 'getAuction'; r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName); r.params = ['1630313952428']; console.log(await transaction_1.sendBscSmartContractMethodInvocationTransaction(r, 'https://data-seed-prebsc-2-s1.binance.org:8545')); }); it('should get auction fee', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad'; r.methodName = 'getAuctionFee'; r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName); r.params = []; console.log(await transaction_1.sendBscSmartContractReadMethodInvocationTransaction(r, 'https://data-seed-prebsc-2-s1.binance.org:8545')); }); }); describe('Auction MATIC transactions', () => { const tokenId = `${Date.now()}`; it('should deploy auction', async () => { const body = new model_1.DeployNftAuction(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.feeRecipient = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.auctionFee = 150; body.chain = model_1.Currency.MATIC; const test = await auction_1.deployAuction(true, body, 'https://rpc-mumbai.maticvigil.com'); console.log(test); expect(test).toBeDefined(); }); it('should create auction native asset', async () => { const mint = new model_1.MintErc721(); mint.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; mint.to = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; mint.contractAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a'; mint.tokenId = tokenId; mint.url = 'https://google.com'; mint.chain = model_1.Currency.MATIC; console.log(await nft_1.mintNFTWithUri(true, mint, 'https://rpc-mumbai.maticvigil.com')); await sleep(); console.log(await auction_1.sendAuctionApproveNftTransfer(true, { fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.MATIC, contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a', isErc721: true, spender: '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073', tokenId }, 'https://rpc-mumbai.maticvigil.com')); await sleep(); const body = new model_1.CreateAuction(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; body.nftAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a'; body.tokenId = tokenId; body.endedAt = (await blockchain_1.polygonGetCurrentBlock()) + 12; body.id = tokenId; body.isErc721 = true; body.seller = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.chain = model_1.Currency.MATIC; console.log(await auction_1.sendAuctionCreate(true, body, 'https://rpc-mumbai.maticvigil.com')); await sleep(2000); const bid = new model_1.InvokeAuctionOperation(); bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; bid.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; bid.id = tokenId; bid.bidValue = '0.001015'; bid.chain = model_1.Currency.MATIC; console.log(await auction_1.sendAuctionBid(true, bid, 'https://rpc-mumbai.maticvigil.com')); await sleep(20000); const settle = new model_1.InvokeAuctionOperation(); settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; settle.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; settle.id = tokenId; settle.chain = model_1.Currency.MATIC; console.log(await auction_1.sendAuctionSettle(true, settle, 'https://rpc-mumbai.maticvigil.com')); }); it('should create auction ERC20 asset', async () => { const approve = new model_1.ApproveErc20(); approve.contractAddress = '0x326c977e6efc84e512bb9c30f76e30c160ed06fb'; approve.spender = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; approve.chain = model_1.Currency.MATIC; approve.amount = '0.001015'; approve.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; console.log(await auction_1.sendAuctionApproveErc20Transfer(true, approve, 'https://rpc-mumbai.maticvigil.com')); const mint = new model_1.MintErc721(); mint.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; mint.to = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; mint.contractAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a'; mint.tokenId = tokenId; mint.url = 'https://google.com'; mint.chain = model_1.Currency.MATIC; console.log(await nft_1.mintNFTWithUri(true, mint, 'https://rpc-mumbai.maticvigil.com')); await sleep(); console.log(await auction_1.sendAuctionApproveNftTransfer(true, { fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.MATIC, contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a', isErc721: true, spender: '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073', tokenId }, 'https://rpc-mumbai.maticvigil.com')); await sleep(); const body = new model_1.CreateAuction(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; body.nftAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a'; body.tokenId = tokenId; body.endedAt = (await blockchain_1.polygonGetCurrentBlock()) + 10; body.id = tokenId; body.isErc721 = true; body.erc20Address = '0x326c977e6efc84e512bb9c30f76e30c160ed06fb'; body.seller = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.chain = model_1.Currency.MATIC; console.log(await auction_1.sendAuctionCreate(true, body, 'https://rpc-mumbai.maticvigil.com')); await sleep(2000); const bid = new model_1.InvokeAuctionOperation(); bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; bid.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; bid.id = tokenId; bid.bidValue = '0.001015'; bid.chain = model_1.Currency.MATIC; bid.fee = { gasLimit: '300000', gasPrice: '5' }; console.log(await auction_1.sendAuctionBid(true, bid, 'https://rpc-mumbai.maticvigil.com')); await sleep(20000); const settle = new model_1.InvokeAuctionOperation(); settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; settle.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073'; settle.id = tokenId; settle.chain = model_1.Currency.MATIC; console.log(await auction_1.sendAuctionSettle(true, settle, 'https://rpc-mumbai.maticvigil.com')); }); }); describe('Exists', () => { it('true', async () => { const result = await auction_1.existsAuction(true, model_1.Currency.CELO, '1', '0x9788B3e257ACDA8E772f111D8A70984390181b23', 'https://alfajores-forno.celo-testnet.org'); expect(result).toEqual(true); }); it('false', async () => { const result = await auction_1.existsAuction(true, model_1.Currency.CELO, '19595', '0x9788B3e257ACDA8E772f111D8A70984390181b23', 'https://alfajores-forno.celo-testnet.org'); expect(result).toEqual(false); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVjdGlvbi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25mdC9tYXJrZXRwbGFjZS9hdWN0aW9uLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBaUc7QUFDakcsNkRBQW9EO0FBQ3BELHVDQUEySztBQUMzSyxtREFJMkI7QUFDM0IsZ0NBQXNDO0FBQ3RDLHVDQUMwSjtBQUUxSixNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFM0UsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFFeEMsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVoQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSx3QkFBZ0IsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsb0VBQW9FLENBQUM7WUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyw0Q0FBNEMsQ0FBQztZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSx1QkFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsMENBQTBDLENBQUMsQ0FBQztZQUN6RixP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