forked from embee/woomy
		
	did logging stuff
This commit is contained in:
		
							parent
							
								
									8db6ff539f
								
							
						
					
					
						commit
						57fb111d3b
					
				
					 5 changed files with 489 additions and 86 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module.exports = (client) => {
 | 
			
		||||
  console.log('Discord client ready!')
 | 
			
		||||
  client.logger.log.ready('Discord client ready!')
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								index.js
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								index.js
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -12,18 +12,21 @@ const fs = require('fs')
 | 
			
		|||
const Discord = require('discord.js')
 | 
			
		||||
const client = new Discord.Client({ disabledEvents: ['TYPING_START'] })
 | 
			
		||||
 | 
			
		||||
require('./modules/functions')(client)
 | 
			
		||||
client.logger = require('./modules/logger')
 | 
			
		||||
 | 
			
		||||
if (fs.existsSync('./.env') === false) {
 | 
			
		||||
  console.log('.env file not found!')
 | 
			
		||||
  client.logger.log.error('The .env file is missing! Please create a .env file.')
 | 
			
		||||
  process.exit()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (fs.existsSync('./config.js') === false) {
 | 
			
		||||
  console.log('config file not found!')
 | 
			
		||||
  client.logger.log.error('The config.js file is missing! Please create a config.js file.')
 | 
			
		||||
  process.exit()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
require('dotenv').config()
 | 
			
		||||
client.config = require('config')
 | 
			
		||||
client.config = require('./config')
 | 
			
		||||
 | 
			
		||||
// Command/alias cache
 | 
			
		||||
client.commands = new Discord.Collection()
 | 
			
		||||
| 
						 | 
				
			
			@ -35,19 +38,23 @@ const init = async () => {
 | 
			
		|||
 | 
			
		||||
  // Load events
 | 
			
		||||
  fs.readdir('./events', (err, files) => {
 | 
			
		||||
    if (err) {}// Prepare variableseturn err
 | 
			
		||||
    if (err) {}
 | 
			
		||||
    client.logger.log.info(`Loading ${files.length} events.`)
 | 
			
		||||
    files.forEach(file => {
 | 
			
		||||
      client.on(file.substr(0, file.length - 3), require('./events/' + file))
 | 
			
		||||
      const event = require(`./events/${file}`)
 | 
			
		||||
      client.on(file.substr(0, file.length - 3), event.bind(null, client))
 | 
			
		||||
    })
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  // Load commands
 | 
			
		||||
 | 
			
		||||
  // Level cache
 | 
			
		||||
  client.levelCache = {}
 | 
			
		||||
  for (let i = 0; i < client.config.permLevels.length; i++) {
 | 
			
		||||
    const currentlevel = client.config.permLevels[i]
 | 
			
		||||
    client.levelCache[currentlevel.name] = currentlevel.level
 | 
			
		||||
    const thisLevel = client.config.permLevels[i]
 | 
			
		||||
    client.levelCache[thisLevel.name] = thisLevel.level
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Login into Discord
 | 
			
		||||
  client.login(process.env.TOKEN)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
const winston = require('winston')
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const root = path.join(__dirname, '..')
 | 
			
		||||
 | 
			
		||||
const levels = {
 | 
			
		||||
  levels: {
 | 
			
		||||
    error: 0,
 | 
			
		||||
    warn: 1,
 | 
			
		||||
    ready: 2,
 | 
			
		||||
    info: 3,
 | 
			
		||||
    cmd: 4
 | 
			
		||||
  },
 | 
			
		||||
  colors: {
 | 
			
		||||
    error: 'red',
 | 
			
		||||
    warn: 'yellow',
 | 
			
		||||
    ready: 'green',
 | 
			
		||||
    info: 'cyan',
 | 
			
		||||
    cmd: 'white'
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
winston.addColors(levels.colors)
 | 
			
		||||
 | 
			
		||||
const format = winston.format.combine(
 | 
			
		||||
  winston.format.colorize(),
 | 
			
		||||
  winston.format.timestamp({
 | 
			
		||||
    format: 'DD-MM-YYYY HH:mm:ss'
 | 
			
		||||
  }),
 | 
			
		||||
  winston.format.printf(
 | 
			
		||||
    info => `${info.timestamp} - ${info.level}: ${info.message}`
 | 
			
		||||
  )
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const logger = winston.createLogger({
 | 
			
		||||
  levels: levels.levels,
 | 
			
		||||
  format: format,
 | 
			
		||||
  transports: [
 | 
			
		||||
    new winston.transports.Console()
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
logger.exitOnError = false
 | 
			
		||||
 | 
			
		||||
module.exports.log = logger
 | 
			
		||||
| 
						 | 
				
			
			@ -1,40 +1,40 @@
 | 
			
		|||
module.exports = client => {
 | 
			
		||||
  client.music = {guilds: {}}
 | 
			
		||||
const ytdl = require('ytdl-core-discord')
 | 
			
		||||
const youtubeInfo = require('youtube-info')
 | 
			
		||||
const getYoutubeId = require('get-youtube-id')
 | 
			
		||||
const fetch = require('node-fetch')
 | 
			
		||||
 | 
			
		||||
  client.music.isYoutubeLink = function(input) {
 | 
			
		||||
module.exports = client => {
 | 
			
		||||
  client.music = { guilds: {} }
 | 
			
		||||
 | 
			
		||||
  client.music.isYoutubeLink = function (input) {
 | 
			
		||||
    return input.startsWith('https://www.youtube.com/') || input.startsWith('http://www.youtube.com/') || input.startsWith('https://youtube.com/') || input.startsWith('http://youtube.com/') || input.startsWith('https://youtu.be/') || input.startsWith('http://youtu.be/') || input.startsWith('http://m.youtube.com/') || input.startsWith('https://m.youtube.com/')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  client.music.search = async function(query)
 | 
			
		||||
  {
 | 
			
		||||
      return new Promise(function(resolve, reject)
 | 
			
		||||
      {
 | 
			
		||||
        try{
 | 
			
		||||
          fetch("https://www.googleapis.com/youtube/v3/search?part=id&type=video&q=" + encodeURIComponent(query) + "&key=" + process.env.YTKEY)
 | 
			
		||||
            .then(res => res.json())
 | 
			
		||||
            .then(json => {
 | 
			
		||||
              if(!json.items) { reject() return }
 | 
			
		||||
              resolve(json.items[0])
 | 
			
		||||
            })
 | 
			
		||||
          } catch (err) {
 | 
			
		||||
            client.logger.error("Music search err: ", err)
 | 
			
		||||
            throw err
 | 
			
		||||
          }
 | 
			
		||||
      })
 | 
			
		||||
  client.music.search = async function (query) {
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
      try {
 | 
			
		||||
        fetch('https://www.googleapis.com/youtube/v3/search?part=id&type=video&q=' + encodeURIComponent(query) + '&key=' + process.env.YTKEY)
 | 
			
		||||
          .then(res => res.json())
 | 
			
		||||
          .then(json => {
 | 
			
		||||
            if (!json.items) { reject() }
 | 
			
		||||
            resolve(json.items[0])
 | 
			
		||||
          })
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        client.logger.error('Music search err: ', err)
 | 
			
		||||
        throw err
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  client.music.getGuild = function(id)
 | 
			
		||||
  {
 | 
			
		||||
      if(client.music.guilds[id]) return client.music.guilds[id]
 | 
			
		||||
  
 | 
			
		||||
      return client.music.guilds[id] =
 | 
			
		||||
      {
 | 
			
		||||
          queue: [],
 | 
			
		||||
          playing: false,
 | 
			
		||||
          paused: false,
 | 
			
		||||
          dispatcher: null,
 | 
			
		||||
          skippers: []
 | 
			
		||||
      }
 | 
			
		||||
  client.music.getGuild = function (id) {
 | 
			
		||||
    if (client.music.guilds[id]) return client.music.guilds[id]
 | 
			
		||||
    return client.music.guilds[id] = {
 | 
			
		||||
      queue: [],
 | 
			
		||||
      playing: false,
 | 
			
		||||
      paused: false,
 | 
			
		||||
      dispatcher: null,
 | 
			
		||||
      skippers: []
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  client.music.getMeta = async function(id)
 | 
			
		||||
| 
						 | 
				
			
			@ -141,30 +141,30 @@ module.exports = client => {
 | 
			
		|||
          message.channel.send(`<:success:466995111885144095> Added to queue: **${song.title}**`)
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  // MUSIC - TIMESTAMP
 | 
			
		||||
  client.createTimestamp = function(duration){
 | 
			
		||||
    hrs = ~~(duration / 60 / 60),
 | 
			
		||||
    min = ~~(duration / 60) % 60,
 | 
			
		||||
    sec = ~~(duration - min * 60)
 | 
			
		||||
  client.createTimestamp = function (duration) {
 | 
			
		||||
    var hrs = ~~(duration / 60 / 60)
 | 
			
		||||
    var min = ~~(duration / 60) % 60
 | 
			
		||||
    var sec = ~~(duration - min * 60)
 | 
			
		||||
  
 | 
			
		||||
    if(String(hrs).length < 2) {
 | 
			
		||||
      hrs = "0" + String(hrs) + ":"
 | 
			
		||||
    if (String(hrs).length < 2) {
 | 
			
		||||
      hrs = '0' + String(hrs) + ':'
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    if(String(min).length < 2) {
 | 
			
		||||
      min = "0" + String(min)
 | 
			
		||||
    if (String(min).length < 2) {
 | 
			
		||||
      min = '0' + String(min)
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    if(String(sec).length < 2) {
 | 
			
		||||
      sec = "0" + String(sec)
 | 
			
		||||
    if (String(sec).length < 2) {
 | 
			
		||||
      sec = '0' + String(sec)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(hrs == "00:") {
 | 
			
		||||
      hrs = ""
 | 
			
		||||
    if (hrs === '00:') {
 | 
			
		||||
      hrs = ''
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    var time = hrs + min + ":" + sec
 | 
			
		||||
 | 
			
		||||
    var time = hrs + min + ':' + sec
 | 
			
		||||
    return time
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										416
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										416
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -2,35 +2,54 @@
 | 
			
		|||
  "requires": true,
 | 
			
		||||
  "lockfileVersion": 1,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@types/color-name": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
 | 
			
		||||
    "@discordjs/collection": {
 | 
			
		||||
      "version": "0.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.5.tgz",
 | 
			
		||||
      "integrity": "sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw=="
 | 
			
		||||
    },
 | 
			
		||||
    "ansi-styles": {
 | 
			
		||||
      "version": "4.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@types/color-name": "^1.1.1",
 | 
			
		||||
        "color-convert": "^2.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "chalk": {
 | 
			
		||||
    "abort-controller": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "ansi-styles": "^4.1.0",
 | 
			
		||||
        "supports-color": "^7.1.0"
 | 
			
		||||
        "event-target-shim": "^5.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "color-convert": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
    "async": {
 | 
			
		||||
      "version": "2.6.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
 | 
			
		||||
      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "color-name": "~1.1.4"
 | 
			
		||||
        "lodash": "^4.17.14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "asynckit": {
 | 
			
		||||
      "version": "0.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
 | 
			
		||||
      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
 | 
			
		||||
    },
 | 
			
		||||
    "color": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "color-convert": "^1.9.1",
 | 
			
		||||
        "color-string": "^1.5.2"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-convert": {
 | 
			
		||||
          "version": "1.9.3",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
 | 
			
		||||
          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-name": "1.1.3"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-name": {
 | 
			
		||||
          "version": "1.1.3",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
 | 
			
		||||
          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "color-name": {
 | 
			
		||||
| 
						 | 
				
			
			@ -38,23 +57,356 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
 | 
			
		||||
    },
 | 
			
		||||
    "has-flag": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
 | 
			
		||||
    "color-string": {
 | 
			
		||||
      "version": "1.5.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
 | 
			
		||||
      "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "color-name": "^1.0.0",
 | 
			
		||||
        "simple-swizzle": "^0.2.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "colornames": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y="
 | 
			
		||||
    },
 | 
			
		||||
    "colors": {
 | 
			
		||||
      "version": "1.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
 | 
			
		||||
    },
 | 
			
		||||
    "colorspace": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "color": "3.0.x",
 | 
			
		||||
        "text-hex": "1.0.x"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "combined-stream": {
 | 
			
		||||
      "version": "1.0.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
 | 
			
		||||
      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "delayed-stream": "~1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "core-util-is": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
 | 
			
		||||
    },
 | 
			
		||||
    "delayed-stream": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
 | 
			
		||||
    },
 | 
			
		||||
    "diagnostics": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "colorspace": "1.1.x",
 | 
			
		||||
        "enabled": "1.0.x",
 | 
			
		||||
        "kuler": "1.0.x"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "discord.js": {
 | 
			
		||||
      "version": "12.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Y6+QfAUZkb9cy27cfNqUigAgYVSKTw9jPF3mN4UDMih3Em3VQ0WjGBdX1UbE8CwFkLOu5XWQSNPdsoStTR8c2Q==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@discordjs/collection": "^0.1.5",
 | 
			
		||||
        "abort-controller": "^3.0.0",
 | 
			
		||||
        "form-data": "^3.0.0",
 | 
			
		||||
        "node-fetch": "^2.6.0",
 | 
			
		||||
        "prism-media": "^1.2.0",
 | 
			
		||||
        "setimmediate": "^1.0.5",
 | 
			
		||||
        "tweetnacl": "^1.0.3",
 | 
			
		||||
        "ws": "^7.2.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "dotenv": {
 | 
			
		||||
      "version": "8.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
 | 
			
		||||
    },
 | 
			
		||||
    "enabled": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "env-variable": "0.0.x"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "env-variable": {
 | 
			
		||||
      "version": "0.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg=="
 | 
			
		||||
    },
 | 
			
		||||
    "event-target-shim": {
 | 
			
		||||
      "version": "5.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "fast-safe-stringify": {
 | 
			
		||||
      "version": "2.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
 | 
			
		||||
    },
 | 
			
		||||
    "fecha": {
 | 
			
		||||
      "version": "2.3.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
 | 
			
		||||
      "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
 | 
			
		||||
    },
 | 
			
		||||
    "form-data": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "asynckit": "^0.4.0",
 | 
			
		||||
        "combined-stream": "^1.0.8",
 | 
			
		||||
        "mime-types": "^2.1.12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "inherits": {
 | 
			
		||||
      "version": "2.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "is-arrayish": {
 | 
			
		||||
      "version": "0.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
 | 
			
		||||
      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "is-stream": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
 | 
			
		||||
    },
 | 
			
		||||
    "isarray": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
 | 
			
		||||
    },
 | 
			
		||||
    "kuler": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "colornames": "^1.1.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "lodash": {
 | 
			
		||||
      "version": "4.17.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
 | 
			
		||||
      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
 | 
			
		||||
    },
 | 
			
		||||
    "logform": {
 | 
			
		||||
      "version": "2.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "colors": "^1.2.1",
 | 
			
		||||
        "fast-safe-stringify": "^2.0.4",
 | 
			
		||||
        "fecha": "^2.3.3",
 | 
			
		||||
        "ms": "^2.1.1",
 | 
			
		||||
        "triple-beam": "^1.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "mime-db": {
 | 
			
		||||
      "version": "1.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "mime-types": {
 | 
			
		||||
      "version": "2.1.26",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
 | 
			
		||||
      "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "mime-db": "1.43.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "moment": {
 | 
			
		||||
      "version": "2.24.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
 | 
			
		||||
    },
 | 
			
		||||
    "supports-color": {
 | 
			
		||||
      "version": "7.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
 | 
			
		||||
    "ms": {
 | 
			
		||||
      "version": "2.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 | 
			
		||||
    },
 | 
			
		||||
    "node-fetch": {
 | 
			
		||||
      "version": "2.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
 | 
			
		||||
    },
 | 
			
		||||
    "one-time": {
 | 
			
		||||
      "version": "0.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
 | 
			
		||||
      "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
 | 
			
		||||
    },
 | 
			
		||||
    "path": {
 | 
			
		||||
      "version": "0.12.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
 | 
			
		||||
      "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "has-flag": "^4.0.0"
 | 
			
		||||
        "process": "^0.11.1",
 | 
			
		||||
        "util": "^0.10.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "prism-media": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-R3EbKwJiYlTvGwcG1DpUt+06DsxOGS5W4AMEHT7oVOjG93MjpdhGX1whHyjnqknylLMupKAsKMEXcTNRbPe6Vw=="
 | 
			
		||||
    },
 | 
			
		||||
    "process": {
 | 
			
		||||
      "version": "0.11.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
 | 
			
		||||
      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
 | 
			
		||||
    },
 | 
			
		||||
    "process-nextick-args": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
 | 
			
		||||
    },
 | 
			
		||||
    "readable-stream": {
 | 
			
		||||
      "version": "3.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "inherits": "^2.0.3",
 | 
			
		||||
        "string_decoder": "^1.1.1",
 | 
			
		||||
        "util-deprecate": "^1.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "safe-buffer": {
 | 
			
		||||
      "version": "5.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
 | 
			
		||||
    },
 | 
			
		||||
    "setimmediate": {
 | 
			
		||||
      "version": "1.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
 | 
			
		||||
      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
 | 
			
		||||
    },
 | 
			
		||||
    "simple-swizzle": {
 | 
			
		||||
      "version": "0.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
 | 
			
		||||
      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "is-arrayish": "^0.3.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "stack-trace": {
 | 
			
		||||
      "version": "0.0.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
 | 
			
		||||
      "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
 | 
			
		||||
    },
 | 
			
		||||
    "string_decoder": {
 | 
			
		||||
      "version": "1.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "safe-buffer": "~5.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "text-hex": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
 | 
			
		||||
    },
 | 
			
		||||
    "triple-beam": {
 | 
			
		||||
      "version": "1.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
 | 
			
		||||
    },
 | 
			
		||||
    "tweetnacl": {
 | 
			
		||||
      "version": "1.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
 | 
			
		||||
    },
 | 
			
		||||
    "util": {
 | 
			
		||||
      "version": "0.10.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
 | 
			
		||||
      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "inherits": "2.0.3"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "inherits": {
 | 
			
		||||
          "version": "2.0.3",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
			
		||||
          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "util-deprecate": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
 | 
			
		||||
    },
 | 
			
		||||
    "winston": {
 | 
			
		||||
      "version": "3.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "async": "^2.6.1",
 | 
			
		||||
        "diagnostics": "^1.1.1",
 | 
			
		||||
        "is-stream": "^1.1.0",
 | 
			
		||||
        "logform": "^2.1.1",
 | 
			
		||||
        "one-time": "0.0.4",
 | 
			
		||||
        "readable-stream": "^3.1.1",
 | 
			
		||||
        "stack-trace": "0.0.x",
 | 
			
		||||
        "triple-beam": "^1.3.0",
 | 
			
		||||
        "winston-transport": "^4.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "winston-transport": {
 | 
			
		||||
      "version": "4.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "readable-stream": "^2.3.6",
 | 
			
		||||
        "triple-beam": "^1.2.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "readable-stream": {
 | 
			
		||||
          "version": "2.3.7",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
 | 
			
		||||
          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "core-util-is": "~1.0.0",
 | 
			
		||||
            "inherits": "~2.0.3",
 | 
			
		||||
            "isarray": "~1.0.0",
 | 
			
		||||
            "process-nextick-args": "~2.0.0",
 | 
			
		||||
            "safe-buffer": "~5.1.1",
 | 
			
		||||
            "string_decoder": "~1.1.1",
 | 
			
		||||
            "util-deprecate": "~1.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "safe-buffer": {
 | 
			
		||||
          "version": "5.1.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
 | 
			
		||||
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
 | 
			
		||||
        },
 | 
			
		||||
        "string_decoder": {
 | 
			
		||||
          "version": "1.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "safe-buffer": "~5.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "ws": {
 | 
			
		||||
      "version": "7.2.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz",
 | 
			
		||||
      "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ=="
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue