diff --git a/__tests__/helpers.js b/__tests__/helpers.js new file mode 100644 index 000000000..21a4741a0 --- /dev/null +++ b/__tests__/helpers.js @@ -0,0 +1,18 @@ +function expectOperator(test, operator, number) { + switch (operator) { + case '=': + return expect(test).toEqual(number); + case '<': + return expect(test).toBeLessThan(number); + case '<=': + return expect(test).toBeLessThanOrEqual(number); + case '>': + return expect(test).toBeGreaterThan(number); + case '>=': + return expect(test).toBeGreaterThanOrEqual(number); + case '!=': + return expect(test).not.toEqual(number); + } +} + +module.exports = { expectOperator }; diff --git a/__tests__/serverjs/cards.test.js b/__tests__/serverjs/cards.test.js index c4856c11f..af2073051 100644 --- a/__tests__/serverjs/cards.test.js +++ b/__tests__/serverjs/cards.test.js @@ -79,6 +79,7 @@ const _RankleMasterofFixtures = { Modern: true, Standard: true, Pauper: false, + Pioneer: true, }, parsed_cost: ['b', 'b', '2'], colors: ['B'], @@ -105,6 +106,21 @@ test('cardFromId returns a well-formed card object', () => { }); }); +test('cardFromId returns only selected fields', () => { + expect.assertions(1); + const _id = _RankleMasterofFixtures._id; + const expected = { + _id: '93c2c11d-dfc3-4ba9-8c0f-a98114090396', + name: 'Rankle, Master of Pranks', + colors: ['B'], + }; + var promise = carddb.initializeCardDb(fixturesPath, true); + return promise.then(function() { + const result = carddb.cardFromId(_id, '_id name colors'); + expect(result).toEqual(expected); + }); +}); + test('cardFromId returns a placeholder card object when given a nonexistent ID', () => { expect.assertions(1); const _id = 'not real'; diff --git a/__tests__/serverjs/draftutil.test.js b/__tests__/serverjs/draftutil.test.js index 9f71ddb23..04dee7a42 100644 --- a/__tests__/serverjs/draftutil.test.js +++ b/__tests__/serverjs/draftutil.test.js @@ -1,81 +1,199 @@ -var sinon = require('sinon'); - +const carddb = require('../../serverjs/cards'); +const fixturesPath = 'fixtures'; +const cubefixture = require('../../fixtures/examplecube'); +const sinon = require('sinon'); const methods = require('../../serverjs/draftutil'); - let CardRating = require('../../models/cardrating'); -beforeEach(() => { - sinon.stub(CardRating, 'find'); -}); +import Filter from '../../src/util/Filter'; +import { expectOperator } from '../helpers'; -afterEach(() => { - CardRating.find.restore(); -}); +describe('getDraftBots', () => { + it('can get the correct number of draft bots', () => { + const params = { + seats: 5, + }; + const result = methods.getDraftBots(params); + expect(result.length).toBe(params.seats - 1); + }); -test('it can get the correct number of draft bots', () => { - const params = { - seats: 5, - }; - const result = methods.getDraftBots(params); - expect(result.length).toBe(params.seats - 1); -}); + it('can get bots with the correct properties', () => { + const allColors = ['W', 'U', 'B', 'R', 'G']; + const params = { + seats: 2, + }; + const result = methods.getDraftBots(params); -test('it can get bots with the correct properties', () => { - const allColors = ['W', 'U', 'B', 'R', 'G']; - const params = { - seats: 2, - }; - const result = methods.getDraftBots(params); - - expect(result[0].length).toBe(2); - expect(allColors.includes(result[0][0])).toBe(true); - expect(allColors.includes(result[0][1])).toBe(true); - expect(result[0][0] === result[0][1]).toBe(false); + expect(result[0].length).toBe(2); + expect(allColors.includes(result[0][0])).toBe(true); + expect(allColors.includes(result[0][1])).toBe(true); + expect(result[0][0] === result[0][1]).toBe(false); + }); }); -test('it returns the index of the first instance of a tag from a list of cards', () => { - const cards = [ - {}, - {}, - { - tags: ['test'], - }, - { - tags: ['test'], - }, - ]; - const tag = 'TEST'; - const result = methods.indexOfTag(cards, tag); - - expect(result).toBe(2); -}); +describe('getDraftFormat', () => { + let exampleCube; -test('it returns -1 if a tag is not found in a list of cards', () => { - const cards = [{}, {}]; - const tag = 'TEST'; - const result = methods.indexOfTag(cards, tag); + it('returns the default format if params are < 0', () => { + let params = { + id: -1, + seats: 4, + packs: 3, + cards: 2, + }; + const format = methods.getDraftFormat(params, exampleCube); + let expected_format = [ + ['*', '*'], // pack 1 (* is any card) + ['*', '*'], // pack 2 + ['*', '*'], // pack 3 + ]; + expected_format.custom = false; + expected_format.multiples = false; - expect(result).toBe(-1); -}); + expect(format).toEqual(expected_format); + expect(format.custom).toBe(false); + expect(format.multiples).toBe(false); + }); + + describe('returns a custom format if params are > 0', () => { + let params; + beforeAll(() => { + params = { id: 0, seats: 8 }; // packs and cards determined by custom format + exampleCube = {}; + exampleCube.draft_formats = []; + exampleCube.draft_formats[0] = {}; // mock + }); -test('getCardRatings returns a mapping of card names to values', () => { - var dummyModel = { - value: 1, - picks: 1, - name: 'Giant Growth', - }; - var expected = {}; - expected[dummyModel.name] = dummyModel.value; - CardRating.find.yields(null, [dummyModel]); - var callback = sinon.stub(); - methods.getCardRatings([], CardRating, callback); - sinon.assert.calledWith(callback, expected); + let expectedFilters = function(...args) { + let expectedFormat = []; + args.forEach((filterText) => { + if (filterText !== null) { + let tokens = []; + Filter.tokenizeInput(filterText, tokens); + filterText = Filter.parseTokens(tokens); + } + expectedFormat.push([filterText]); + }); + return expectedFormat; + }; + + describe.each([ + [ + 'example filters - 1 pack, 1 card', + '[["rarity:Mythic,tag:New,identity>1"]]', // filter JSON + false, // multiples + [[expectedFilters('rarity:Mythic', 'tag:New', 'identity>1')]], + ], + [ + 'example filters - 1 pack, 2 cards, allow multiples', + '[["rarity:Mythic,tag:New,identity>1", "tag:mytag"]]', // filter JSON + true, // multiples + [[expectedFilters('rarity:Mythic', 'tag:New', 'identity>1'), expectedFilters('tag:mytag')]], + ], + [ + 'backwards compatible tags', + '[["mytag,*,*"]]', // filter JSON + false, // multiples + [[expectedFilters('tag:mytag', null, null)]], + ], + [ + 'mixed filters and tags with multiple packs with different card counts', + '[["rarity:Mythic,mytag"],["*"],["rarity:mythic,rarity:common","*"]]', // filter JSON + false, // multiples + [ + [expectedFilters('rarity:Mythic', 'tag:mytag')], // pack 1 + [[[null]]], // pack 2 + [expectedFilters('rarity:Mythic', 'rarity:common'), [[null]]], // pack 3 + ], + ], + ])('%s', (name, packsFormat, multiples, expected) => { + test(`returns expected format`, () => { + exampleCube.draft_formats[params.id].packs = packsFormat; + exampleCube.draft_formats[params.id].multiples = multiples; + // NOTE: Because format array als incudes properties (which we aren't testing in this test) + // we need to convert to json to compare safely. + // See https://github.com/facebook/jest/issues/8475 + let formatJSON = JSON.stringify(methods.getDraftFormat(params, exampleCube)); + let expectedJSON = JSON.stringify(expected); + expect(formatJSON).toEqual(expectedJSON); + }); + + test(`returned has correct multiples value`, () => { + exampleCube.draft_formats[params.id].packs = packsFormat; + exampleCube.draft_formats[params.id].multiples = multiples; + expect(methods.getDraftFormat(params, exampleCube).multiples).toEqual(multiples); + }); + + test(`returned format is marked as custom`, () => { + exampleCube.draft_formats[params.id].packs = packsFormat; + exampleCube.draft_formats[params.id].multiples = multiples; + expect(methods.getDraftFormat(params, exampleCube).custom).toEqual(true); + }); + }); + }); }); -test('getCardRatings returns an empty dict when there are no ratings present ', () => { - var expected = {}; - CardRating.find.yields(null, []); - var callback = sinon.stub(); - methods.getCardRatings([], CardRating, callback); - sinon.assert.calledWith(callback, expected); +describe('createDraft', () => { + let format, cards, bots, seats; + beforeAll(() => { + format = []; + cards = []; + bots = []; + seats = 8; + }); + + it('returns an error if no cards supplied', () => { + cards = []; + bots = ['fakebot']; + expect(() => { + methods.createDraft(format, cards, bots, seats); + }).toThrow(/no cards/); + }); + + it('returns an error if no bots supplied', () => { + cards = ['mockcard']; + bots = []; + expect(() => { + methods.createDraft(format, cards, bots, seats); + }).toThrow(/no bots/); + }); + + it('returns an error if seats < 2', () => { + cards = ['mockcards']; + bots = ['mockbot']; + expect(() => { + methods.createDraft(format, cards, bots, 1); + }).toThrow(/invalid seats/); + expect(() => { + methods.createDraft(format, cards, bots, null); + }).toThrow(/invalid seats/); + expect(() => { + methods.createDraft(format, cards, bots, -1); + }).toThrow(/invalid seats/); + }); + + it('sets the intitial state of the draft', () => { + let exampleCube = JSON.parse(JSON.stringify(cubefixture.exampleCube)); + let promise = carddb.initializeCardDb(fixturesPath, true).then(() => { + exampleCube.cards.forEach(function(card, index) { + card.details = carddb.cardFromId(card.cardID); + }); + }); + return promise.then(() => { + cards = exampleCube.cards; + bots = ['mockbot']; + format = methods.getDraftFormat({ id: -1, packs: 1, cards: 15, seats: seats }, exampleCube); + let draft = methods.createDraft(format, cards, bots, 8); + expect(draft.pickNumber).toEqual(1); + expect(draft.packNumber).toEqual(1); + expect(draft).toHaveProperty('packs'); + expect(draft).toHaveProperty('packs'); + expect(draft).toHaveProperty('bots'); + // CoreMongooseArray causing trouble, so we check length and use stringify + expect(draft.bots.length).toEqual(1); + let initial_stateJSON = JSON.stringify(draft.initial_state); + let packsJSON = JSON.stringify(draft.packs); + expect(initial_stateJSON).toEqual(packsJSON); + }); + }); }); diff --git a/__tests__/src/filter.test.js b/__tests__/src/filter.test.js index f3782ca4d..1f73672af 100644 --- a/__tests__/src/filter.test.js +++ b/__tests__/src/filter.test.js @@ -3,6 +3,7 @@ const fixturesPath = 'fixtures'; const cubefixture = require('../../fixtures/examplecube'); import Filter from '../../src/util/Filter'; +import { expectOperator } from '../helpers'; const setCounts = (cards, propertyName) => { let greenCardCount = 0; @@ -212,6 +213,7 @@ describe('filter', () => { Legacy: true, Modern: true, Pauper: false, + Pioneer: true, Standard: true, }, parsed_cost: [''], @@ -265,6 +267,7 @@ describe('filter', () => { Legacy: true, Modern: true, Pauper: false, + Pioneer: true, Standard: true, }, parsed_cost: [''], @@ -312,6 +315,7 @@ describe('filter', () => { Legacy: true, Modern: true, Pauper: false, + Pioneer: true, Standard: true, }, parsed_cost: [''], @@ -359,6 +363,7 @@ describe('filter', () => { Legacy: true, Modern: true, Pauper: false, + Pioneer: true, Standard: true, }, parsed_cost: [''], @@ -406,6 +411,7 @@ describe('filter', () => { Legacy: true, Modern: true, Pauper: false, + Pioneer: true, Standard: true, }, parsed_cost: [''], @@ -507,6 +513,72 @@ describe('filter', () => { expect(card.details.colors).toEqual([]); }); }); + + let testColorCount = function(operator, numColors, expectedCount) { + let tokens = []; + Filter.tokenizeInput('c' + operator + numColors, tokens); + const filter = [Filter.parseTokens(tokens)]; + const cards = exampleCube.cards.filter((card) => Filter.filterCard(card, filter)); + //console.log(operator, numColors, expectedCount, cards.length); + cards.forEach((card) => { + expectOperator(card.details.colors.length, operator, numColors); + }); + expect(cards).toHaveLength(expectedCount); + }; + + describe('color counting', () => { + it('the = operator filters for exact color count', () => { + testColorCount('=', 0, 8); + testColorCount('=', 1, 46); + testColorCount('=', 2, 11); + testColorCount('=', 3, 0); + testColorCount('=', 4, 0); + testColorCount('=', 5, 0); + }); + + it('the < operator filters for less-than this many colors', () => { + testColorCount('<', 1, 8); + testColorCount('<', 2, 54); + testColorCount('<', 3, 65); + testColorCount('<', 4, 65); + testColorCount('<', 5, 65); + }); + + it('the <= operator filters for less-than-or-equal-to this many colors', () => { + testColorCount('<=', 0, 8); + testColorCount('<=', 1, 54); + testColorCount('<=', 2, 65); + testColorCount('<=', 3, 65); + testColorCount('<=', 4, 65); + testColorCount('<=', 5, 65); + }); + + it('the > operator filters for greater-than this many colors', () => { + testColorCount('>', 0, 57); + testColorCount('>', 1, 11); + testColorCount('>', 2, 0); + testColorCount('>', 3, 0); + testColorCount('>', 4, 0); + }); + + it('the >= operator filters for greater-than-or-equal-to this many colors', () => { + testColorCount('>=', 0, 65); + testColorCount('>=', 1, 57); + testColorCount('>=', 2, 11); + testColorCount('>=', 3, 0); + testColorCount('>=', 4, 0); + testColorCount('>=', 5, 0); + }); + + it('the != operator filters for cmc not-equal to this many colors', () => { + testColorCount('!=', 0, 57); + testColorCount('!=', 1, 19); + testColorCount('!=', 2, 54); + testColorCount('!=', 3, 65); + testColorCount('!=', 4, 65); + testColorCount('!=', 5, 65); + }); + }); }); describe('color identity filters', () => { @@ -566,7 +638,6 @@ describe('filter', () => { it('the < operator filters for colorless cards', () => { testColors('<', colorlessCardCount, inCube, (card) => { - if (card.details.color_identity.length > 0) console.log(card); expect(card.details.color_identity).toEqual([]); }); }); @@ -583,7 +654,6 @@ describe('filter', () => { it('the = operator filters for mono-color cards', () => { testColors(':', greenCardCount, inCube, (card) => { - //console.log('card colors', card.details.color_identity); expect(card.colors).toEqual(['G']); }); }); @@ -613,6 +683,72 @@ describe('filter', () => { }); }); }); + + let testColorCount = function(operator, numColors, expectedCount) { + let tokens = []; + Filter.tokenizeInput('ci' + operator + numColors, tokens); + const filter = [Filter.parseTokens(tokens)]; + const cards = exampleCube.cards.filter((card) => Filter.filterCard(card, filter, false)); + //console.log(operator, numColors, expectedCount, cards.length); + cards.forEach((card) => { + expectOperator(card.details.color_identity.length, operator, numColors); + }); + expect(cards).toHaveLength(expectedCount); + }; + + describe('color identity counting', () => { + it('the = operator filters for exact color identity count', () => { + testColorCount('=', 0, 3); + testColorCount('=', 1, 51); + testColorCount('=', 2, 11); + testColorCount('=', 3, 0); + testColorCount('=', 4, 0); + testColorCount('=', 5, 0); + }); + + it('the < operator filters for less-than color identity count', () => { + testColorCount('<', 1, 3); + testColorCount('<', 2, 54); + testColorCount('<', 3, 65); + testColorCount('<', 4, 65); + testColorCount('<', 5, 65); + }); + + it('the <= operator filters for less-than-or-equal-to color identity count', () => { + testColorCount('<=', 0, 3); + testColorCount('<=', 1, 54); + testColorCount('<=', 2, 65); + testColorCount('<=', 3, 65); + testColorCount('<=', 4, 65); + testColorCount('<=', 5, 65); + }); + + it('the > operator filters for greater-than color identity count', () => { + testColorCount('>', 0, 62); + testColorCount('>', 1, 11); + testColorCount('>', 2, 0); + testColorCount('>', 3, 0); + testColorCount('>', 4, 0); + }); + + it('the >= operator filters for greater-than-or-equal-to color identity count', () => { + testColorCount('>=', 0, 65); + testColorCount('>=', 1, 62); + testColorCount('>=', 2, 11); + testColorCount('>=', 3, 0); + testColorCount('>=', 4, 0); + testColorCount('>=', 5, 0); + }); + + it('the != operator filters for cmc not-equal to color identity count', () => { + testColorCount('!=', 0, 62); + testColorCount('!=', 1, 14); + testColorCount('!=', 2, 54); + testColorCount('!=', 3, 65); + testColorCount('!=', 4, 65); + testColorCount('!=', 5, 65); + }); + }); }); describe('mana filtering', () => { @@ -653,7 +789,7 @@ describe('filter', () => { const ltOneCmcFilter = [Filter.parseTokens(tokens)]; const ltOneCmcCards = exampleCube.cards.filter((card) => Filter.filterCard(card, ltOneCmcFilter)); ltOneCmcCards.forEach((card) => { - expect(card.details.cmc).toEqual(0); + expect(card.details.cmc).toBeLessThan(1); }); expect(ltOneCmcCards).toHaveLength(7); }); @@ -726,9 +862,6 @@ describe('filter', () => { Filter.tokenizeInput('set=ELD', tokens); const eldraineFilter = [Filter.parseTokens(tokens)]; const eldraineCards = exampleCube.cards.filter((card) => Filter.filterCard(card, eldraineFilter)); - exampleCube.cards.forEach((card) => { - if (card.details.set !== 'eld') console.log(card); - }); eldraineCards.forEach((card) => { expect(card.details.set).toContain('eld'); }); diff --git a/fixtures/carddict.json b/fixtures/carddict.json index 874631a93..11210a485 100644 --- a/fixtures/carddict.json +++ b/fixtures/carddict.json @@ -1 +1 @@ -{"0c3f372d-259d-4a31-9491-2d369b3f3f8b":{"color_identity":["R","W"],"set":"eld","collector_number":"194","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Inspiring Veteran","name_lower":"inspiring veteran","full_name":"Inspiring Veteran [eld-194]","artist":"Scott Murphy","scryfall_uri":"https://scryfall.com/card/eld/194/inspiring-veteran?utm_source=api","rarity":"uncommon","oracle_text":"Other Knights you control get +1/+1.","_id":"0c3f372d-259d-4a31-9491-2d369b3f3f8b","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","r"],"colors":["R","W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198561,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","image_normal":"https://img.scryfall.com/cards/normal/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","colorcategory":"m"},"0461867b-ec35-4d37-a398-5247e06c4afe":{"color_identity":["R","U"],"set":"eld","collector_number":"193","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Improbable Alliance","name_lower":"improbable alliance","full_name":"Improbable Alliance [eld-193]","artist":"Zoltan Boros","scryfall_uri":"https://scryfall.com/card/eld/193/improbable-alliance?utm_source=api","rarity":"uncommon","oracle_text":"Whenever you draw your second card each turn, create a 1/1 blue Faerie creature token with flying.\n{4}{U}{R}: Draw a card, then discard a card.","_id":"0461867b-ec35-4d37-a398-5247e06c4afe","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","u"],"colors":["R","U"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199403,"image_small":"https://img.scryfall.com/cards/small/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","image_normal":"https://img.scryfall.com/cards/normal/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","colorcategory":"m","tokens":[{"tokenId":"bcd82cb0-ff4b-4f4d-b3d0-3ac53883b099","sourceCardId":"0461867b-ec35-4d37-a398-5247e06c4afe"}]},"6da7cd39-1f8a-4f68-adb7-df2beac02263":{"color_identity":["G"],"set":"eld","collector_number":"164","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Kenrith's Transformation","name_lower":"kenrith's transformation","full_name":"Kenrith's Transformation [eld-164]","artist":"Kimonas Theodossiou","scryfall_uri":"https://scryfall.com/card/eld/164/kenriths-transformation?utm_source=api","rarity":"uncommon","oracle_text":"Enchant creature\nWhen Kenrith's Transformation enters the battlefield, draw a card.\nEnchanted creature loses all abilities and is a green Elk creature with base power and toughness 3/3. (It loses all other card types and creature types.)","_id":"6da7cd39-1f8a-4f68-adb7-df2beac02263","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","1"],"colors":["G"],"type":"Enchantment — Aura","full_art":false,"language":"en","tcgplayer_id":199539,"image_small":"https://img.scryfall.com/cards/small/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","image_normal":"https://img.scryfall.com/cards/normal/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","colorcategory":"g"},"83b5b110-c430-4ffe-9fc1-8e6987f52d1e":{"color_identity":["R"],"set":"eld","collector_number":"143","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Slaying Fire","name_lower":"slaying fire","full_name":"Slaying Fire [eld-143]","artist":"Heonhwa Choe","scryfall_uri":"https://scryfall.com/card/eld/143/slaying-fire?utm_source=api","rarity":"uncommon","oracle_text":"Slaying Fire deals 3 damage to any target.\nAdamant — If at least three red mana was spent to cast this spell, it deals 4 damage instead.","_id":"83b5b110-c430-4ffe-9fc1-8e6987f52d1e","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","2"],"colors":["R"],"type":"Instant","full_art":false,"language":"en","tcgplayer_id":198422,"image_small":"https://img.scryfall.com/cards/small/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","image_normal":"https://img.scryfall.com/cards/normal/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","colorcategory":"r"},"562f1c51-d245-4771-bf61-415297e4f9d5":{"color_identity":["W"],"set":"eld","collector_number":"15","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Glass Casket","name_lower":"glass casket","full_name":"Glass Casket [eld-15]","artist":"Anastasia Ovchinnikova","scryfall_uri":"https://scryfall.com/card/eld/15/glass-casket?utm_source=api","rarity":"uncommon","oracle_text":"When Glass Casket enters the battlefield, exile target creature an opponent controls with converted mana cost 3 or less until Glass Casket leaves the battlefield.","_id":"562f1c51-d245-4771-bf61-415297e4f9d5","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":199004,"image_small":"https://img.scryfall.com/cards/small/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","image_normal":"https://img.scryfall.com/cards/normal/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","colorcategory":"w"},"0a7962fe-b715-4981-86c3-223bad9b1899":{"color_identity":["B"],"set":"eld","collector_number":"100","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Piper of the Swarm","name_lower":"piper of the swarm","full_name":"Piper of the Swarm [eld-100]","artist":"Irina Nordsol","scryfall_uri":"https://scryfall.com/card/eld/100/piper-of-the-swarm?utm_source=api","rarity":"rare","oracle_text":"Rats you control have menace.\n{1}{B}, {T}: Create a 1/1 black Rat creature token.\n{2}{B}{B}, {T}, Sacrifice three Rats: Gain control of target creature.","_id":"0a7962fe-b715-4981-86c3-223bad9b1899","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","1"],"colors":["B"],"type":"Creature — Human Warlock","full_art":false,"language":"en","tcgplayer_id":198582,"power":"1","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","colorcategory":"b","tokens":[{"tokenId":"e43a205e-43ea-4b3e-92ab-c2ee2172a50a","sourceCardId":"0a7962fe-b715-4981-86c3-223bad9b1899"}]},"b841bfa8-7c17-4df2-8466-780ab9a4a53a":{"color_identity":[],"set":"eld","collector_number":"244","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fabled Passage","name_lower":"fabled passage","full_name":"Fabled Passage [eld-244]","artist":"Howard Lyon","scryfall_uri":"https://scryfall.com/card/eld/244/fabled-passage?utm_source=api","rarity":"rare","oracle_text":"{T}, Sacrifice Fabled Passage: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. Then if you control four or more lands, untap that land.","_id":"b841bfa8-7c17-4df2-8466-780ab9a4a53a","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199428,"image_small":"https://img.scryfall.com/cards/small/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","colorcategory":"l"},"0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b":{"color_identity":["U"],"set":"eld","collector_number":"242","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Vantress","name_lower":"castle vantress","full_name":"Castle Vantress [eld-242]","artist":"John Avon","scryfall_uri":"https://scryfall.com/card/eld/242/castle-vantress?utm_source=api","rarity":"rare","oracle_text":"Castle Vantress enters the battlefield tapped unless you control an Island.\n{T}: Add {U}.\n{2}{U}{U}, {T}: Scry 2.","_id":"0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199284,"image_small":"https://img.scryfall.com/cards/small/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","colorcategory":"l"},"195383c1-4723-40b0-ba53-298dfd8e30d0":{"color_identity":["B"],"set":"eld","collector_number":"241","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Locthwain","name_lower":"castle locthwain","full_name":"Castle Locthwain [eld-241]","artist":"Titus Lunter","scryfall_uri":"https://scryfall.com/card/eld/241/castle-locthwain?utm_source=api","rarity":"rare","oracle_text":"Castle Locthwain enters the battlefield tapped unless you control a Swamp.\n{T}: Add {B}.\n{1}{B}{B}, {T}: Draw a card, then you lose life equal to the number of cards in your hand.","_id":"195383c1-4723-40b0-ba53-298dfd8e30d0","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199388,"image_small":"https://img.scryfall.com/cards/small/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","image_normal":"https://img.scryfall.com/cards/normal/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","art_crop":"https://img.scryfall.com/cards/art_crop/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","colorcategory":"l"},"e3c2c66c-f7f0-41d5-a805-a129aeaf1b75":{"color_identity":["G"],"set":"eld","collector_number":"240","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Garenbrig","name_lower":"castle garenbrig","full_name":"Castle Garenbrig [eld-240]","artist":"Adam Paquette","scryfall_uri":"https://scryfall.com/card/eld/240/castle-garenbrig?utm_source=api","rarity":"rare","oracle_text":"Castle Garenbrig enters the battlefield tapped unless you control a Forest.\n{T}: Add {G}.\n{2}{G}{G}, {T}: Add six {G}. Spend this mana only to cast creature spells or activate abilities of creatures.","_id":"e3c2c66c-f7f0-41d5-a805-a129aeaf1b75","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199288,"image_small":"https://img.scryfall.com/cards/small/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","colorcategory":"l"},"8bb8512e-6913-4be6-8828-24cfcbec042e":{"color_identity":["R"],"set":"eld","collector_number":"239","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Embereth","name_lower":"castle embereth","full_name":"Castle Embereth [eld-239]","artist":"Jaime Jones","scryfall_uri":"https://scryfall.com/card/eld/239/castle-embereth?utm_source=api","rarity":"rare","oracle_text":"Castle Embereth enters the battlefield tapped unless you control a Mountain.\n{T}: Add {R}.\n{1}{R}{R}, {T}: Creatures you control get +1/+0 until end of turn.","_id":"8bb8512e-6913-4be6-8828-24cfcbec042e","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199286,"image_small":"https://img.scryfall.com/cards/small/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","colorcategory":"l"},"7f910495-8bd7-4134-a281-c16fd666d5cc":{"color_identity":["W"],"set":"eld","collector_number":"238","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Ardenvale","name_lower":"castle ardenvale","full_name":"Castle Ardenvale [eld-238]","artist":"Volkan Baǵa","scryfall_uri":"https://scryfall.com/card/eld/238/castle-ardenvale?utm_source=api","rarity":"rare","oracle_text":"Castle Ardenvale enters the battlefield tapped unless you control a Plains.\n{T}: Add {W}.\n{2}{W}{W}, {T}: Create a 1/1 white Human creature token.","_id":"7f910495-8bd7-4134-a281-c16fd666d5cc","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199390,"image_small":"https://img.scryfall.com/cards/small/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","colorcategory":"l","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"7f910495-8bd7-4134-a281-c16fd666d5cc"}]},"b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe":{"color_identity":[],"set":"eld","collector_number":"235","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Stonecoil Serpent","name_lower":"stonecoil serpent","full_name":"Stonecoil Serpent [eld-235]","artist":"Mark Poole","scryfall_uri":"https://scryfall.com/card/eld/235/stonecoil-serpent?utm_source=api","rarity":"rare","oracle_text":"Reach, trample, protection from multicolored\nStonecoil Serpent enters the battlefield with X +1/+1 counters on it.","_id":"b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["x"],"colors":[],"type":"Artifact Creature — Snake","full_art":false,"language":"en","tcgplayer_id":199257,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","image_normal":"https://img.scryfall.com/cards/normal/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","colorcategory":"c"},"e47e85d1-8c4a-43a9-92b3-7cb2a5b89219":{"color_identity":[],"set":"eld","collector_number":"233","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Sorcerous Spyglass","name_lower":"sorcerous spyglass","full_name":"Sorcerous Spyglass [eld-233]","artist":"Aaron Miller","scryfall_uri":"https://scryfall.com/card/eld/233/sorcerous-spyglass?utm_source=api","rarity":"rare","oracle_text":"As Sorcerous Spyglass enters the battlefield, look at an opponent's hand, then choose any card name.\nActivated abilities of sources with the chosen name can't be activated unless they're mana abilities.","_id":"e47e85d1-8c4a-43a9-92b3-7cb2a5b89219","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["2"],"colors":[],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198975,"image_small":"https://img.scryfall.com/cards/small/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","colorcategory":"c"},"27425f2e-e0b2-489d-877d-8257d2026bfd":{"color_identity":["B","R"],"set":"eld","collector_number":"203","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Stormfist Crusader","name_lower":"stormfist crusader","full_name":"Stormfist Crusader [eld-203]","artist":"Chris Rallis","scryfall_uri":"https://scryfall.com/card/eld/203/stormfist-crusader?utm_source=api","rarity":"rare","oracle_text":"Menace\nAt the beginning of your upkeep, each player draws a card and loses 1 life.","_id":"27425f2e-e0b2-489d-877d-8257d2026bfd","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","b"],"colors":["B","R"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199425,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","image_normal":"https://img.scryfall.com/cards/normal/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","art_crop":"https://img.scryfall.com/cards/art_crop/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","colorcategory":"m"},"5d7585ab-a364-471c-8ef1-318e459b4020":{"color_identity":["R","W"],"set":"eld","collector_number":"198","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Outlaws' Merriment","name_lower":"outlaws' merriment","full_name":"Outlaws' Merriment [eld-198]","artist":"Suzanne Helmigh","scryfall_uri":"https://scryfall.com/card/eld/198/outlaws-merriment?utm_source=api","rarity":"mythic","oracle_text":"At the beginning of your upkeep, choose one at random. Create a red and white creature token with those characteristics.\n• 3/1 Human Warrior with trample and haste.\n• 2/1 Human Cleric with lifelink and haste.\n• 1/2 Human Rogue with haste and \"When this creature enters the battlefield, it deals 1 damage to any target.\"","_id":"5d7585ab-a364-471c-8ef1-318e459b4020","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","w","r","1"],"colors":["R","W"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":198849,"image_small":"https://img.scryfall.com/cards/small/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","colorcategory":"m","tokens":[{"tokenId":"db951f76-b785-453e-91b9-b3b8a5c1cfd4","sourceCardId":"5d7585ab-a364-471c-8ef1-318e459b4020"},{"tokenId":"cd3ca6d5-4b2c-46d4-95f3-f0f2fa47f447","sourceCardId":"5d7585ab-a364-471c-8ef1-318e459b4020"},{"tokenId":"c994ea90-71f4-403f-9418-2b72cc2de14d","sourceCardId":"5d7585ab-a364-471c-8ef1-318e459b4020"}]},"3287beea-747c-4cb6-aea5-051e85c5de8d":{"color_identity":["B","U"],"set":"eld","collector_number":"195","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Lochmere Serpent","name_lower":"lochmere serpent","full_name":"Lochmere Serpent [eld-195]","artist":"Sam Burley","scryfall_uri":"https://scryfall.com/card/eld/195/lochmere-serpent?utm_source=api","rarity":"rare","oracle_text":"Flash\n{U}, Sacrifice an Island: Lochmere Serpent can't be blocked this turn.\n{B}, Sacrifice a Swamp: You gain 1 life and draw a card.\n{U}{B}: Exile five target cards from an opponent's graveyard. Return Lochmere Serpent from your graveyard to your hand. Activate this ability only any time you could cast a sorcery.","_id":"3287beea-747c-4cb6-aea5-051e85c5de8d","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","u","4"],"colors":["B","U"],"type":"Creature — Serpent","full_art":false,"language":"en","tcgplayer_id":198775,"power":"7","toughness":"7","image_small":"https://img.scryfall.com/cards/small/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","image_normal":"https://img.scryfall.com/cards/normal/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","colorcategory":"m"},"1ca29912-88b1-413f-ad9d-63d7d1b1ca16":{"color_identity":["G","W"],"set":"eld","collector_number":"190","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Faeburrow Elder","name_lower":"faeburrow elder","full_name":"Faeburrow Elder [eld-190]","artist":"Raoul Vitale","scryfall_uri":"https://scryfall.com/card/eld/190/faeburrow-elder?utm_source=api","rarity":"rare","oracle_text":"Vigilance\nFaeburrow Elder gets +1/+1 for each color among permanents you control.\n{T}: For each color among permanents you control, add one mana of that color.","_id":"1ca29912-88b1-413f-ad9d-63d7d1b1ca16","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","g","1"],"colors":["G","W"],"type":"Creature — Treefolk Druid","full_art":false,"language":"en","tcgplayer_id":199026,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","image_normal":"https://img.scryfall.com/cards/normal/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","art_crop":"https://img.scryfall.com/cards/art_crop/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","colorcategory":"m"},"3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9":{"color_identity":["G","R"],"set":"eld","collector_number":"189","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Escape to the Wilds","name_lower":"escape to the wilds","full_name":"Escape to the Wilds [eld-189]","artist":"Chris Ostrowski","scryfall_uri":"https://scryfall.com/card/eld/189/escape-to-the-wilds?utm_source=api","rarity":"rare","oracle_text":"Exile the top five cards of your library. You may play cards exiled this way until the end of your next turn.\nYou may play an additional land this turn.","_id":"3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","r","3"],"colors":["G","R"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199297,"image_small":"https://img.scryfall.com/cards/small/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","image_normal":"https://img.scryfall.com/cards/normal/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","colorcategory":"m"},"e76c0c83-3e87-474d-bc72-1677eed32cfa":{"color_identity":["B","W"],"set":"eld","collector_number":"187","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Doom Foretold","name_lower":"doom foretold","full_name":"Doom Foretold [eld-187]","artist":"Daniel Ljunggren","scryfall_uri":"https://scryfall.com/card/eld/187/doom-foretold?utm_source=api","rarity":"rare","oracle_text":"At the beginning of each player's upkeep, that player sacrifices a nonland, nontoken permanent. If that player can't, they discard a card, they lose 2 life, you draw a card, you gain 2 life, you create a 2/2 white Knight creature token with vigilance, then you sacrifice Doom Foretold.","_id":"e76c0c83-3e87-474d-bc72-1677eed32cfa","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","w","2"],"colors":["B","W"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":198873,"image_small":"https://img.scryfall.com/cards/small/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","colorcategory":"m","tokens":[{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"e76c0c83-3e87-474d-bc72-1677eed32cfa"}]},"5dca90ef-1c17-4dcc-9fef-dab9ee92f590":{"color_identity":["U","W"],"set":"eld","collector_number":"186","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Dance of the Manse","name_lower":"dance of the manse","full_name":"Dance of the Manse [eld-186]","artist":"Yeong-Hao Han","scryfall_uri":"https://scryfall.com/card/eld/186/dance-of-the-manse?utm_source=api","rarity":"rare","oracle_text":"Return up to X target artifact and/or non-Aura enchantment cards each with converted mana cost X or less from your graveyard to the battlefield. If X is 6 or more, those permanents are 4/4 creatures in addition to their other types.","_id":"5dca90ef-1c17-4dcc-9fef-dab9ee92f590","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","w","x"],"colors":["U","W"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199024,"image_small":"https://img.scryfall.com/cards/small/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","colorcategory":"m"},"ae2998a1-1713-467e-a08e-0efd8720aa5b":{"color_identity":["G"],"set":"eld","collector_number":"185","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Yorvo, Lord of Garenbrig","name_lower":"yorvo, lord of garenbrig","full_name":"Yorvo, Lord of Garenbrig [eld-185]","artist":"Zack Stella","scryfall_uri":"https://scryfall.com/card/eld/185/yorvo-lord-of-garenbrig?utm_source=api","rarity":"rare","oracle_text":"Yorvo, Lord of Garenbrig enters the battlefield with four +1/+1 counters on it.\nWhenever another green creature enters the battlefield under your control, put a +1/+1 counter on Yorvo. Then if that creature's power is greater than Yorvo's power, put another +1/+1 counter on Yorvo.","_id":"ae2998a1-1713-467e-a08e-0efd8720aa5b","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","g","g"],"colors":["G"],"type":"Legendary Creature — Giant Noble","full_art":false,"language":"en","tcgplayer_id":199295,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","image_normal":"https://img.scryfall.com/cards/normal/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","colorcategory":"g"},"55f76830-369e-4224-9ded-7d1ce04c87e4":{"color_identity":["G"],"set":"eld","collector_number":"182","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Wildborn Preserver","name_lower":"wildborn preserver","full_name":"Wildborn Preserver [eld-182]","artist":"Lius Lasahido","scryfall_uri":"https://scryfall.com/card/eld/182/wildborn-preserver?utm_source=api","rarity":"rare","oracle_text":"Flash\nReach\nWhenever another non-Human creature enters the battlefield under your control, you may pay {X}. When you do, put X +1/+1 counters on Wildborn Preserver.","_id":"55f76830-369e-4224-9ded-7d1ce04c87e4","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","1"],"colors":["G"],"type":"Creature — Elf Archer","full_art":false,"language":"en","tcgplayer_id":198781,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","image_normal":"https://img.scryfall.com/cards/normal/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","colorcategory":"g"},"09476eac-55d2-4955-8951-ae4ce117c98b":{"color_identity":["G"],"set":"eld","collector_number":"181","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Wicked Wolf","name_lower":"wicked wolf","full_name":"Wicked Wolf [eld-181]","artist":"Tomasz Jedruszek","scryfall_uri":"https://scryfall.com/card/eld/181/wicked-wolf?utm_source=api","rarity":"rare","oracle_text":"When Wicked Wolf enters the battlefield, it fights up to one target creature you don't control.\nSacrifice a Food: Put a +1/+1 counter on Wicked Wolf. It gains indestructible until end of turn. Tap it.","_id":"09476eac-55d2-4955-8951-ae4ce117c98b","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","g","2"],"colors":["G"],"type":"Creature — Wolf","full_art":false,"language":"en","tcgplayer_id":198764,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","colorcategory":"g"},"b88a4943-bd1b-4d10-9cd3-b2ab91b25c10":{"color_identity":["G"],"set":"eld","collector_number":"172","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Return of the Wildspeaker","name_lower":"return of the wildspeaker","full_name":"Return of the Wildspeaker [eld-172]","artist":"Chris Rallis","scryfall_uri":"https://scryfall.com/card/eld/172/return-of-the-wildspeaker?utm_source=api","rarity":"rare","oracle_text":"Choose one —\n• Draw cards equal to the greatest power among non-Human creatures you control.\n• Non-Human creatures you control get +3/+3 until end of turn.","_id":"b88a4943-bd1b-4d10-9cd3-b2ab91b25c10","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","4"],"colors":["G"],"type":"Instant","full_art":false,"language":"en","tcgplayer_id":199415,"image_small":"https://img.scryfall.com/cards/small/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","colorcategory":"g"},"e41cf82d-3213-47ce-a015-6e51a8b07e4f":{"color_identity":["G"],"set":"eld","collector_number":"171","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Questing Beast","name_lower":"questing beast","full_name":"Questing Beast [eld-171]","artist":"Igor Kieryluk","scryfall_uri":"https://scryfall.com/card/eld/171/questing-beast?utm_source=api","rarity":"mythic","oracle_text":"Vigilance, deathtouch, haste\nQuesting Beast can't be blocked by creatures with power 2 or less.\nCombat damage that would be dealt by creatures you control can't be prevented.\nWhenever Questing Beast deals combat damage to an opponent, it deals that much damage to target planeswalker that player controls.","_id":"e41cf82d-3213-47ce-a015-6e51a8b07e4f","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","g","2"],"colors":["G"],"type":"Legendary Creature — Beast","full_art":false,"language":"en","tcgplayer_id":198763,"power":"4","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","colorcategory":"g"},"4034e5ba-9974-43e3-bde7-8d9b4586c3a4":{"color_identity":["G"],"set":"eld","collector_number":"169","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Once Upon a Time","name_lower":"once upon a time","full_name":"Once Upon a Time [eld-169]","artist":"Matt Stewart","scryfall_uri":"https://scryfall.com/card/eld/169/once-upon-a-time?utm_source=api","rarity":"rare","oracle_text":"If this spell is the first spell you've cast this game, you may cast it without paying its mana cost.\nLook at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.","_id":"4034e5ba-9974-43e3-bde7-8d9b4586c3a4","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","1"],"colors":["G"],"type":"Instant","full_art":false,"language":"en","tcgplayer_id":198710,"image_small":"https://img.scryfall.com/cards/small/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195","image_normal":"https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195","colorcategory":"g"},"af915ed2-1f34-43f6-85f5-2430325b720f":{"color_identity":["G"],"set":"eld","collector_number":"161","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Great Henge","name_lower":"the great henge","full_name":"The Great Henge [eld-161]","artist":"Adam Paquette","scryfall_uri":"https://scryfall.com/card/eld/161/the-great-henge?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {X} less to cast, where X is the greatest power among creatures you control.\n{T}: Add {G}{G}. You gain 2 life.\nWhenever a nontoken creature enters the battlefield under your control, put a +1/+1 counter on it and draw a card.","_id":"af915ed2-1f34-43f6-85f5-2430325b720f","cmc":9,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","g","7"],"colors":["G"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":199361,"image_small":"https://img.scryfall.com/cards/small/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","image_normal":"https://img.scryfall.com/cards/normal/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","colorcategory":"g"},"30377bf0-d9b1-4c14-8dde-f74b1e02d604":{"color_identity":["G"],"set":"eld","collector_number":"160","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Gilded Goose","name_lower":"gilded goose","full_name":"Gilded Goose [eld-160]","artist":"Lindsey Look","scryfall_uri":"https://scryfall.com/card/eld/160/gilded-goose?utm_source=api","rarity":"rare","oracle_text":"Flying\nWhen Gilded Goose enters the battlefield, create a Food token. (It's an artifact with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")\n{1}{G}, {T}: Create a Food token.\n{T}, Sacrifice a Food: Add one mana of any color.","_id":"30377bf0-d9b1-4c14-8dde-f74b1e02d604","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g"],"colors":["G"],"type":"Creature — Bird","full_art":false,"language":"en","tcgplayer_id":198394,"power":"0","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","image_normal":"https://img.scryfall.com/cards/normal/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","colorcategory":"g","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"30377bf0-d9b1-4c14-8dde-f74b1e02d604"},{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"30377bf0-d9b1-4c14-8dde-f74b1e02d604"}]},"9a6bb435-1205-416a-a5a0-ca6d37b4dcb2":{"color_identity":["G"],"set":"eld","collector_number":"152","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Feasting Troll King","name_lower":"feasting troll king","full_name":"Feasting Troll King [eld-152]","artist":"Nicholas Gregory","scryfall_uri":"https://scryfall.com/card/eld/152/feasting-troll-king?utm_source=api","rarity":"rare","oracle_text":"Vigilance, trample\nWhen Feasting Troll King enters the battlefield, if you cast it from your hand, create three Food tokens. (They're artifacts with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")\nSacrifice three Foods: Return Feasting Troll King from your graveyard to the battlefield. Activate this ability only during your turn.","_id":"9a6bb435-1205-416a-a5a0-ca6d37b4dcb2","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","g","g","g","2"],"colors":["G"],"type":"Creature — Troll Noble","full_art":false,"language":"en","tcgplayer_id":198776,"power":"7","toughness":"6","image_small":"https://img.scryfall.com/cards/small/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","colorcategory":"g","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"9a6bb435-1205-416a-a5a0-ca6d37b4dcb2"}]},"79f591cd-d277-4ba5-b1bf-1c09cac9cb8a":{"color_identity":["R"],"set":"eld","collector_number":"147","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Torbran, Thane of Red Fell","name_lower":"torbran, thane of red fell","full_name":"Torbran, Thane of Red Fell [eld-147]","artist":"Grzegorz Rutkowski","scryfall_uri":"https://scryfall.com/card/eld/147/torbran-thane-of-red-fell?utm_source=api","rarity":"rare","oracle_text":"If a red source you control would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 2 instead.","_id":"79f591cd-d277-4ba5-b1bf-1c09cac9cb8a","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","r","r","1"],"colors":["R"],"type":"Legendary Creature — Dwarf Noble","full_art":false,"language":"en","tcgplayer_id":199556,"power":"2","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","colorcategory":"r"},"24b7a774-ca49-4291-8a19-cb5e475b10d5":{"color_identity":["R"],"set":"eld","collector_number":"144","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Sundering Stroke","name_lower":"sundering stroke","full_name":"Sundering Stroke [eld-144]","artist":"Stanton Feng","scryfall_uri":"https://scryfall.com/card/eld/144/sundering-stroke?utm_source=api","rarity":"rare","oracle_text":"Sundering Stroke deals 7 damage divided as you choose among one, two, or three targets. If at least seven red mana was spent to cast this spell, instead Sundering Stroke deals 7 damage to each of those permanents and/or players.","_id":"24b7a774-ca49-4291-8a19-cb5e475b10d5","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","6"],"colors":["R"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199108,"image_small":"https://img.scryfall.com/cards/small/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","image_normal":"https://img.scryfall.com/cards/normal/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","art_crop":"https://img.scryfall.com/cards/art_crop/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","colorcategory":"r"},"0ecbe097-ba51-42e5-957c-382eb66c08f0":{"color_identity":["R"],"set":"eld","collector_number":"138","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Robber of the Rich","name_lower":"robber of the rich","full_name":"Robber of the Rich [eld-138]","artist":"Paul Scott Canavan","scryfall_uri":"https://scryfall.com/card/eld/138/robber-of-the-rich?utm_source=api","rarity":"mythic","oracle_text":"Reach, haste\nWhenever Robber of the Rich attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell.","_id":"0ecbe097-ba51-42e5-957c-382eb66c08f0","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","1"],"colors":["R"],"type":"Creature — Human Archer Rogue","full_art":false,"language":"en","tcgplayer_id":198777,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","image_normal":"https://img.scryfall.com/cards/normal/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","colorcategory":"r"},"3fa16922-3583-4f5b-8805-509b95a8da49":{"color_identity":["R"],"set":"eld","collector_number":"133","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Opportunistic Dragon","name_lower":"opportunistic dragon","full_name":"Opportunistic Dragon [eld-133]","artist":"Chris Rahn","scryfall_uri":"https://scryfall.com/card/eld/133/opportunistic-dragon?utm_source=api","rarity":"rare","oracle_text":"Flying\nWhen Opportunistic Dragon enters the battlefield, choose target Human or artifact an opponent controls. For as long as Opportunistic Dragon remains on the battlefield, gain control of that permanent, it loses all abilities, and it can't attack or block.","_id":"3fa16922-3583-4f5b-8805-509b95a8da49","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","r","2"],"colors":["R"],"type":"Creature — Dragon","full_art":false,"language":"en","tcgplayer_id":198952,"power":"4","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","image_normal":"https://img.scryfall.com/cards/normal/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","colorcategory":"r"},"9a7b0ead-5629-429d-bede-8154f3fae96d":{"color_identity":["R"],"set":"eld","collector_number":"128","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Irencrag Pyromancer","name_lower":"irencrag pyromancer","full_name":"Irencrag Pyromancer [eld-128]","artist":"Jason Rainville","scryfall_uri":"https://scryfall.com/card/eld/128/irencrag-pyromancer?utm_source=api","rarity":"rare","oracle_text":"Whenever you draw your second card each turn, Irencrag Pyromancer deals 3 damage to any target.","_id":"9a7b0ead-5629-429d-bede-8154f3fae96d","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","2"],"colors":["R"],"type":"Creature — Human Wizard","full_art":false,"language":"en","tcgplayer_id":199359,"power":"0","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","colorcategory":"r"},"b5bcf822-e129-45f6-9403-310ce9410f3b":{"color_identity":["R"],"set":"eld","collector_number":"127","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Irencrag Feat","name_lower":"irencrag feat","full_name":"Irencrag Feat [eld-127]","artist":"Yongjae Choi","scryfall_uri":"https://scryfall.com/card/eld/127/irencrag-feat?utm_source=api","rarity":"rare","oracle_text":"Add seven {R}. You can cast only one more spell this turn.","_id":"b5bcf822-e129-45f6-9403-310ce9410f3b","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","r","r","1"],"colors":["R"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199036,"image_small":"https://img.scryfall.com/cards/small/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","image_normal":"https://img.scryfall.com/cards/normal/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","colorcategory":"r"},"a12b16b0-f75f-42d8-9b24-947c1908e0f7":{"color_identity":["R"],"set":"eld","collector_number":"125","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fires of Invention","name_lower":"fires of invention","full_name":"Fires of Invention [eld-125]","artist":"Stanton Feng","scryfall_uri":"https://scryfall.com/card/eld/125/fires-of-invention?utm_source=api","rarity":"rare","oracle_text":"You can cast spells only during your turn and you can cast no more than two spells each turn.\nYou may cast spells with converted mana cost less than or equal to the number of lands you control without paying their mana costs.","_id":"a12b16b0-f75f-42d8-9b24-947c1908e0f7","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","3"],"colors":["R"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199255,"image_small":"https://img.scryfall.com/cards/small/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","colorcategory":"r"},"c52d66db-5570-48a1-99cf-e0417517747b":{"color_identity":["R"],"set":"eld","collector_number":"124","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fervent Champion","name_lower":"fervent champion","full_name":"Fervent Champion [eld-124]","artist":"Steve Argyle","scryfall_uri":"https://scryfall.com/card/eld/124/fervent-champion?utm_source=api","rarity":"rare","oracle_text":"First strike, haste\nWhenever Fervent Champion attacks, another target attacking Knight you control gets +1/+0 until end of turn.\nEquip abilities you activate that target Fervent Champion cost {3} less to activate.","_id":"c52d66db-5570-48a1-99cf-e0417517747b","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r"],"colors":["R"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198973,"power":"1","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","colorcategory":"r"},"aaae15dd-11b6-4421-99e9-365c7fe4a5d6":{"color_identity":["R"],"set":"eld","collector_number":"120","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Embercleave","name_lower":"embercleave","full_name":"Embercleave [eld-120]","artist":"Joe Slucher","scryfall_uri":"https://scryfall.com/card/eld/120/embercleave?utm_source=api","rarity":"mythic","oracle_text":"Flash\nThis spell costs {1} less to cast for each attacking creature you control.\nWhen Embercleave enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+1 and has double strike and trample.\nEquip {3}","_id":"aaae15dd-11b6-4421-99e9-365c7fe4a5d6","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","r","4"],"colors":["R"],"type":"Legendary Artifact — Equipment","full_art":false,"language":"en","tcgplayer_id":198755,"image_small":"https://img.scryfall.com/cards/small/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","image_normal":"https://img.scryfall.com/cards/normal/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","colorcategory":"r"},"dbf16457-3444-4130-b220-834b69d9faa3":{"color_identity":["B"],"set":"eld","collector_number":"111","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Witch's Vengeance","name_lower":"witch's vengeance","full_name":"Witch's Vengeance [eld-111]","artist":"Titus Lunter","scryfall_uri":"https://scryfall.com/card/eld/111/witchs-vengeance?utm_source=api","rarity":"rare","oracle_text":"Creatures of the creature type of your choice get -3/-3 until end of turn.","_id":"dbf16457-3444-4130-b220-834b69d9faa3","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","1"],"colors":["B"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":198750,"image_small":"https://img.scryfall.com/cards/small/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","image_normal":"https://img.scryfall.com/cards/normal/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","colorcategory":"b"},"07c17b01-ee5d-491a-8403-b3f819b778c4":{"color_identity":["B"],"set":"eld","collector_number":"110","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Wishclaw Talisman","name_lower":"wishclaw talisman","full_name":"Wishclaw Talisman [eld-110]","artist":"Daarken","scryfall_uri":"https://scryfall.com/card/eld/110/wishclaw-talisman?utm_source=api","rarity":"rare","oracle_text":"Wishclaw Talisman enters the battlefield with three wish counters on it.\n{1}, {T}, Remove a wish counter from Wishclaw Talisman: Search your library for a card, put it into your hand, then shuffle your library. An opponent gains control of Wishclaw Talisman. Activate this ability only during your turn.","_id":"07c17b01-ee5d-491a-8403-b3f819b778c4","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","1"],"colors":["B"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198745,"image_small":"https://img.scryfall.com/cards/small/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","image_normal":"https://img.scryfall.com/cards/normal/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","colorcategory":"b"},"93c2c11d-dfc3-4ba9-8c0f-a98114090396":{"color_identity":["B"],"set":"eld","collector_number":"101","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Rankle, Master of Pranks","name_lower":"rankle, master of pranks","full_name":"Rankle, Master of Pranks [eld-101]","artist":"Dmitry Burmak","scryfall_uri":"https://scryfall.com/card/eld/101/rankle-master-of-pranks?utm_source=api","rarity":"mythic","oracle_text":"Flying, haste\nWhenever Rankle, Master of Pranks deals combat damage to a player, choose any number —\n• Each player discards a card.\n• Each player loses 1 life and draws a card.\n• Each player sacrifices a creature.","_id":"93c2c11d-dfc3-4ba9-8c0f-a98114090396","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","2"],"colors":["B"],"type":"Legendary Creature — Faerie Rogue","full_art":false,"language":"en","tcgplayer_id":198584,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","image_normal":"https://img.scryfall.com/cards/normal/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","colorcategory":"b"},"9173ffda-1d3b-4dab-8dcb-de44717de464":{"color_identity":["B"],"set":"eld","collector_number":"98","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Oathsworn Knight","name_lower":"oathsworn knight","full_name":"Oathsworn Knight [eld-98]","artist":"Svetlin Velinov","scryfall_uri":"https://scryfall.com/card/eld/98/oathsworn-knight?utm_source=api","rarity":"rare","oracle_text":"Oathsworn Knight enters the battlefield with four +1/+1 counters on it.\nOathsworn Knight attacks each combat if able.\nIf damage would be dealt to Oathsworn Knight while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from it.","_id":"9173ffda-1d3b-4dab-8dcb-de44717de464","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199020,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","image_normal":"https://img.scryfall.com/cards/normal/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","colorcategory":"b"},"85929131-4df6-415c-b592-aefb2943c477":{"color_identity":["B"],"set":"eld","collector_number":"84","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Clackbridge Troll","name_lower":"clackbridge troll","full_name":"Clackbridge Troll [eld-84]","artist":"Svetlin Velinov","scryfall_uri":"https://scryfall.com/card/eld/84/clackbridge-troll?utm_source=api","rarity":"rare","oracle_text":"Trample, haste\nWhen Clackbridge Troll enters the battlefield, target opponent creates three 0/1 white Goat creature tokens.\nAt the beginning of combat on your turn, any opponent may sacrifice a creature. If a player does, tap Clackbridge Troll, you gain 3 life, and you draw a card.","_id":"85929131-4df6-415c-b592-aefb2943c477","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","3"],"colors":["B"],"type":"Creature — Troll","full_art":false,"language":"en","tcgplayer_id":198782,"power":"8","toughness":"8","image_small":"https://img.scryfall.com/cards/small/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","image_normal":"https://img.scryfall.com/cards/normal/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","colorcategory":"b","tokens":[{"tokenId":"213be25c-88db-440b-83c3-973586a4f320","sourceCardId":"85929131-4df6-415c-b592-aefb2943c477"}]},"eb69473f-de99-43a7-b094-429465ae735c":{"color_identity":["B"],"set":"eld","collector_number":"82","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Cauldron of Eternity","name_lower":"the cauldron of eternity","full_name":"The Cauldron of Eternity [eld-82]","artist":"Tomasz Jedruszek","scryfall_uri":"https://scryfall.com/card/eld/82/the-cauldron-of-eternity?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {2} less to cast for each creature card in your graveyard.\nWhenever a creature you control dies, put it on the bottom of its owner's library.\n{2}{B}, {T}, Pay 2 life: Return target creature card from your graveyard to the battlefield. Activate this ability only any time you could cast a sorcery.","_id":"eb69473f-de99-43a7-b094-429465ae735c","cmc":12,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","10"],"colors":["B"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":199279,"image_small":"https://img.scryfall.com/cards/small/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","image_normal":"https://img.scryfall.com/cards/normal/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","colorcategory":"b"},"fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5":{"color_identity":["B"],"set":"eld","collector_number":"79","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Blacklance Paragon","name_lower":"blacklance paragon","full_name":"Blacklance Paragon [eld-79]","artist":"Victor Adame Minguez","scryfall_uri":"https://scryfall.com/card/eld/79/blacklance-paragon?utm_source=api","rarity":"rare","oracle_text":"Flash\nWhen Blacklance Paragon enters the battlefield, target Knight gains deathtouch and lifelink until end of turn.","_id":"fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199277,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","image_normal":"https://img.scryfall.com/cards/normal/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","colorcategory":"b"},"ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1":{"color_identity":["B"],"set":"eld","collector_number":"75","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Ayara, First of Locthwain","name_lower":"ayara, first of locthwain","full_name":"Ayara, First of Locthwain [eld-75]","artist":"Ryan Pancoast","scryfall_uri":"https://scryfall.com/card/eld/75/ayara-first-of-locthwain?utm_source=api","rarity":"rare","oracle_text":"Whenever Ayara, First of Locthwain or another black creature enters the battlefield under your control, each opponent loses 1 life and you gain 1 life.\n{T}, Sacrifice another black creature: Draw a card.","_id":"ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","b"],"colors":["B"],"type":"Legendary Creature — Elf Noble","full_art":false,"language":"en","tcgplayer_id":198909,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","image_normal":"https://img.scryfall.com/cards/normal/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","colorcategory":"b"},"daff1c8d-0f25-4bec-bd50-208ae2ac0aac":{"color_identity":["U"],"set":"eld","collector_number":"71","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Vantress Gargoyle","name_lower":"vantress gargoyle","full_name":"Vantress Gargoyle [eld-71]","artist":"Cristi Balanescu","scryfall_uri":"https://scryfall.com/card/eld/71/vantress-gargoyle?utm_source=api","rarity":"rare","oracle_text":"Flying\nVantress Gargoyle can't attack unless defending player has seven or more cards in their graveyard.\nVantress Gargoyle can't block unless you have four or more cards in hand.\n{T}: Each player puts the top card of their library into their graveyard.","_id":"daff1c8d-0f25-4bec-bd50-208ae2ac0aac","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","1"],"colors":["U"],"type":"Artifact Creature — Gargoyle","full_art":false,"language":"en","tcgplayer_id":199034,"power":"5","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","image_normal":"https://img.scryfall.com/cards/normal/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","colorcategory":"u"},"a98a7698-57fb-41f6-86d4-251c7d444c6a":{"color_identity":["U"],"set":"eld","collector_number":"66","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Stolen by the Fae","name_lower":"stolen by the fae","full_name":"Stolen by the Fae [eld-66]","artist":"Ryan Alexander Lee","scryfall_uri":"https://scryfall.com/card/eld/66/stolen-by-the-fae?utm_source=api","rarity":"rare","oracle_text":"Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying.","_id":"a98a7698-57fb-41f6-86d4-251c7d444c6a","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","u","x"],"colors":["U"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":198981,"image_small":"https://img.scryfall.com/cards/small/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","image_normal":"https://img.scryfall.com/cards/normal/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","colorcategory":"u","tokens":[{"tokenId":"bcd82cb0-ff4b-4f4d-b3d0-3ac53883b099","sourceCardId":"a98a7698-57fb-41f6-86d4-251c7d444c6a"}]},"a10c1407-d397-4caa-b7b7-e7d91ffd4ee9":{"color_identity":["U"],"set":"eld","collector_number":"55","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Mirrormade","name_lower":"mirrormade","full_name":"Mirrormade [eld-55]","artist":"Volkan Baǵa","scryfall_uri":"https://scryfall.com/card/eld/55/mirrormade?utm_source=api","rarity":"rare","oracle_text":"You may have Mirrormade enter the battlefield as a copy of any artifact or enchantment on the battlefield.","_id":"a10c1407-d397-4caa-b7b7-e7d91ffd4ee9","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","u","1"],"colors":["U"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199057,"image_small":"https://img.scryfall.com/cards/small/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","colorcategory":"u"},"0f7f1148-7b1b-4969-a2f8-428de1e2e8ff":{"color_identity":["U"],"set":"eld","collector_number":"54","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Midnight Clock","name_lower":"midnight clock","full_name":"Midnight Clock [eld-54]","artist":"Alexander Forssberg","scryfall_uri":"https://scryfall.com/card/eld/54/midnight-clock?utm_source=api","rarity":"rare","oracle_text":"{T}: Add {U}.\n{2}{U}: Put an hour counter on Midnight Clock.\nAt the beginning of each upkeep, put an hour counter on Midnight Clock.\nWhen the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.","_id":"0f7f1148-7b1b-4969-a2f8-428de1e2e8ff","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","2"],"colors":["U"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198581,"image_small":"https://img.scryfall.com/cards/small/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","image_normal":"https://img.scryfall.com/cards/normal/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","colorcategory":"u"},"08b89af1-7b22-4153-b42d-a2ea4e0f320c":{"color_identity":["U"],"set":"eld","collector_number":"51","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Magic Mirror","name_lower":"the magic mirror","full_name":"The Magic Mirror [eld-51]","artist":"Anastasia Ovchinnikova","scryfall_uri":"https://scryfall.com/card/eld/51/the-magic-mirror?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {1} less to cast for each instant and sorcery card in your graveyard.\nYou have no maximum hand size.\nAt the beginning of your upkeep, put a knowledge counter on The Magic Mirror, then draw a card for each knowledge counter on The Magic Mirror.","_id":"08b89af1-7b22-4153-b42d-a2ea4e0f320c","cmc":9,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","u","u","6"],"colors":["U"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":199031,"image_small":"https://img.scryfall.com/cards/small/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","image_normal":"https://img.scryfall.com/cards/normal/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","colorcategory":"u"},"62ddce0d-f22a-4fcd-9a4a-d71938750ba1":{"color_identity":["U"],"set":"eld","collector_number":"48","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Gadwick, the Wizened","name_lower":"gadwick, the wizened","full_name":"Gadwick, the Wizened [eld-48]","artist":"Colin Boyer","scryfall_uri":"https://scryfall.com/card/eld/48/gadwick-the-wizened?utm_source=api","rarity":"rare","oracle_text":"When Gadwick, the Wizened enters the battlefield, draw X cards.\nWhenever you cast a blue spell, tap target nonland permanent an opponent controls.","_id":"62ddce0d-f22a-4fcd-9a4a-d71938750ba1","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","u","u","x"],"colors":["U"],"type":"Legendary Creature — Human Wizard","full_art":false,"language":"en","tcgplayer_id":198943,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","image_normal":"https://img.scryfall.com/cards/normal/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","colorcategory":"u"},"6afc67d1-1018-4a15-ab5f-377fd11dcd3d":{"color_identity":["U"],"set":"eld","collector_number":"46","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Folio of Fancies","name_lower":"folio of fancies","full_name":"Folio of Fancies [eld-46]","artist":"Colin Boyer","scryfall_uri":"https://scryfall.com/card/eld/46/folio-of-fancies?utm_source=api","rarity":"rare","oracle_text":"Players have no maximum hand size.\n{X}{X}, {T}: Each player draws X cards.\n{2}{U}, {T}: Each opponent puts a number of cards equal to the number of cards in their hand from the top of their library into their graveyard.","_id":"6afc67d1-1018-4a15-ab5f-377fd11dcd3d","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","1"],"colors":["U"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":199019,"image_small":"https://img.scryfall.com/cards/small/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","colorcategory":"u"},"bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a":{"color_identity":["U"],"set":"eld","collector_number":"43","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Emry, Lurker of the Loch","name_lower":"emry, lurker of the loch","full_name":"Emry, Lurker of the Loch [eld-43]","artist":"Livia Prima","scryfall_uri":"https://scryfall.com/card/eld/43/emry-lurker-of-the-loch?utm_source=api","rarity":"rare","oracle_text":"This spell costs {1} less to cast for each artifact you control.\nWhen Emry, Lurker of the Loch enters the battlefield, put the top four cards of your library into your graveyard.\n{T}: Choose target artifact card in your graveyard. You may cast that card this turn. (You still pay its costs. Timing rules still apply.)","_id":"bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","2"],"colors":["U"],"type":"Legendary Creature — Merfolk Wizard","full_art":false,"language":"en","tcgplayer_id":198857,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","image_normal":"https://img.scryfall.com/cards/normal/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","colorcategory":"u"},"4b2bde2d-e5df-407e-993c-85880dbb6045":{"color_identity":["W"],"set":"eld","collector_number":"36","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Worthy Knight","name_lower":"worthy knight","full_name":"Worthy Knight [eld-36]","artist":"Yongjae Choi","scryfall_uri":"https://scryfall.com/card/eld/36/worthy-knight?utm_source=api","rarity":"rare","oracle_text":"Whenever you cast a Knight spell, create a 1/1 white Human creature token.","_id":"4b2bde2d-e5df-407e-993c-85880dbb6045","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198811,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","image_normal":"https://img.scryfall.com/cards/normal/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","colorcategory":"w","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"4b2bde2d-e5df-407e-993c-85880dbb6045"}]},"fa3ab467-be97-4b84-a73d-b03484d06b97":{"color_identity":["W"],"set":"eld","collector_number":"20","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Linden, the Steadfast Queen","name_lower":"linden, the steadfast queen","full_name":"Linden, the Steadfast Queen [eld-20]","artist":"Ryan Pancoast","scryfall_uri":"https://scryfall.com/card/eld/20/linden-the-steadfast-queen?utm_source=api","rarity":"rare","oracle_text":"Vigilance\nWhenever a white creature you control attacks, you gain 1 life.","_id":"fa3ab467-be97-4b84-a73d-b03484d06b97","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","w","w"],"colors":["W"],"type":"Legendary Creature — Human Noble","full_art":false,"language":"en","tcgplayer_id":199209,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","image_normal":"https://img.scryfall.com/cards/normal/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","colorcategory":"w"},"663b3e6f-1099-4de8-a0a7-6f1919c38010":{"color_identity":["W"],"set":"eld","collector_number":"18","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Hushbringer","name_lower":"hushbringer","full_name":"Hushbringer [eld-18]","artist":"Bastien L. Deharme","scryfall_uri":"https://scryfall.com/card/eld/18/hushbringer?utm_source=api","rarity":"rare","oracle_text":"Flying, lifelink\nCreatures entering the battlefield or dying don't cause abilities to trigger.","_id":"663b3e6f-1099-4de8-a0a7-6f1919c38010","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":199465,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","image_normal":"https://img.scryfall.com/cards/normal/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","colorcategory":"w"},"c7093834-9627-4da2-9322-c03bfd5b3a71":{"color_identity":["W"],"set":"eld","collector_number":"17","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Harmonious Archon","name_lower":"harmonious archon","full_name":"Harmonious Archon [eld-17]","artist":"Anastasia Ovchinnikova","scryfall_uri":"https://scryfall.com/card/eld/17/harmonious-archon?utm_source=api","rarity":"mythic","oracle_text":"Flying\nNon-Archon creatures have base power and toughness 3/3.\nWhen Harmonious Archon enters the battlefield, create two 1/1 white Human creature tokens.","_id":"c7093834-9627-4da2-9322-c03bfd5b3a71","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","w","4"],"colors":["W"],"type":"Creature — Archon","full_art":false,"language":"en","tcgplayer_id":198854,"power":"4","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","colorcategory":"w","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"c7093834-9627-4da2-9322-c03bfd5b3a71"}]},"d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b":{"color_identity":["W"],"set":"eld","collector_number":"16","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Happily Ever After","name_lower":"happily ever after","full_name":"Happily Ever After [eld-16]","artist":"Matt Stewart","scryfall_uri":"https://scryfall.com/card/eld/16/happily-ever-after?utm_source=api","rarity":"rare","oracle_text":"When Happily Ever After enters the battlefield, each player gains 5 life and draws a card.\nAt the beginning of your upkeep, if there are five colors among permanents you control, there are six or more card types among permanents you control and/or cards in your graveyard, and your life total is greater than or equal to your starting life total, you win the game.","_id":"d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","2"],"colors":["W"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199413,"image_small":"https://img.scryfall.com/cards/small/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","image_normal":"https://img.scryfall.com/cards/normal/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","colorcategory":"w"},"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f":{"color_identity":["W"],"set":"eld","collector_number":"9","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Circle of Loyalty","name_lower":"the circle of loyalty","full_name":"The Circle of Loyalty [eld-9]","artist":"Bastien L. Deharme","scryfall_uri":"https://scryfall.com/card/eld/9/the-circle-of-loyalty?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {1} less to cast for each Knight you control.\nCreatures you control get +1/+1.\nWhenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.\n{3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.","_id":"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","w","4"],"colors":["W"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":198557,"image_small":"https://img.scryfall.com/cards/small/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","colorcategory":"w","tokens":[{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f"},{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f"}]},"dcb94950-3f3e-4876-84f8-d5e4d9cfecee":{"color_identity":["W"],"set":"eld","collector_number":"8","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Charming Prince","name_lower":"charming prince","full_name":"Charming Prince [eld-8]","artist":"Randy Vargas","scryfall_uri":"https://scryfall.com/card/eld/8/charming-prince?utm_source=api","rarity":"rare","oracle_text":"When Charming Prince enters the battlefield, choose one —\n• Scry 2.\n• You gain 3 life.\n• Exile another target creature you own. Return it to the battlefield under your control at the beginning of the next end step.","_id":"dcb94950-3f3e-4876-84f8-d5e4d9cfecee","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Creature — Human Noble","full_art":false,"language":"en","tcgplayer_id":198860,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","image_normal":"https://img.scryfall.com/cards/normal/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","colorcategory":"w"},"fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e":{"color_identity":["W"],"set":"eld","collector_number":"1","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Acclaimed Contender","name_lower":"acclaimed contender","full_name":"Acclaimed Contender [eld-1]","artist":"David Gaillet","scryfall_uri":"https://scryfall.com/card/eld/1/acclaimed-contender?utm_source=api","rarity":"rare","oracle_text":"When Acclaimed Contender enters the battlefield, if you control another Knight, look at the top five cards of your library. You may reveal a Knight, Aura, Equipment, or legendary artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.","_id":"fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","2"],"colors":["W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199292,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","image_normal":"https://img.scryfall.com/cards/normal/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","colorcategory":"w"},"8a665794-513f-4f78-92c9-1844ec27c79c":{"color_identity":["G","W"],"set":"eld","collector_number":"212","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Oakhame Ranger","name_lower":"oakhame ranger","full_name":"Oakhame Ranger [eld-212]","artist":"Mitchell Malloy & Maddie Julyk","scryfall_uri":"https://scryfall.com/card/eld/212/oakhame-ranger-bring-back?utm_source=api","rarity":"uncommon","oracle_text":"{T}: Creatures you control get +1/+1 until end of turn.\nCreate two 1/1 white Human creature tokens. (Then exile this card. You may cast the creature later from exile.)","_id":"8a665794-513f-4f78-92c9-1844ec27c79c","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g-w","g-w","g-w","g-w","split","g-w","g-w","g-w","g-w"],"colors":["G","W"],"type":"Creature — Elf Knight","full_art":false,"language":"en","tcgplayer_id":198889,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","image_normal":"https://img.scryfall.com/cards/normal/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","colorcategory":"m","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"8a665794-513f-4f78-92c9-1844ec27c79c"}]},"8bc518fc-904e-4e39-aeda-ffb222bfcc82":{"color_identity":["G"],"set":"eld","collector_number":"180","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Tuinvale Treefolk","name_lower":"tuinvale treefolk","full_name":"Tuinvale Treefolk [eld-180]","artist":"Jason A. Engle","scryfall_uri":"https://scryfall.com/card/eld/180/tuinvale-treefolk-oaken-boon?utm_source=api","rarity":"common","oracle_text":"\nPut two +1/+1 counters on target creature. (Then exile this card. You may cast the creature later from exile.)","_id":"8bc518fc-904e-4e39-aeda-ffb222bfcc82","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["g","3","split","g","5"],"colors":["G"],"type":"Creature — Treefolk Druid","full_art":false,"language":"en","tcgplayer_id":199212,"power":"6","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","colorcategory":"g"},"2a0d430f-da84-4752-940c-8457c525aac9":{"color_identity":["G"],"set":"eld","collector_number":"174","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Rosethorn Acolyte","name_lower":"rosethorn acolyte","full_name":"Rosethorn Acolyte [eld-174]","artist":"Johannes Voss","scryfall_uri":"https://scryfall.com/card/eld/174/rosethorn-acolyte-seasonal-ritual?utm_source=api","rarity":"common","oracle_text":"{T}: Add one mana of any color.\nAdd one mana of any color. (Then exile this card. You may cast the creature later from exile.)","_id":"2a0d430f-da84-4752-940c-8457c525aac9","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["g","split","g","2"],"colors":["G"],"type":"Creature — Elf Druid","full_art":false,"language":"en","tcgplayer_id":198551,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","image_normal":"https://img.scryfall.com/cards/normal/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","art_crop":"https://img.scryfall.com/cards/art_crop/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","colorcategory":"g"},"4ccdef9c-1e85-4358-8059-8972479f7556":{"color_identity":["G"],"set":"eld","collector_number":"165","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Lovestruck Beast","name_lower":"lovestruck beast","full_name":"Lovestruck Beast [eld-165]","artist":"Kev Walker","scryfall_uri":"https://scryfall.com/card/eld/165/lovestruck-beast-hearts-desire?utm_source=api","rarity":"rare","oracle_text":"Lovestruck Beast can't attack unless you control a 1/1 creature.\nCreate a 1/1 white Human creature token. (Then exile this card. You may cast the creature later from exile.)","_id":"4ccdef9c-1e85-4358-8059-8972479f7556","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","split","g","2"],"colors":["G"],"type":"Creature — Beast Noble","full_art":false,"language":"en","tcgplayer_id":198578,"power":"5","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","image_normal":"https://img.scryfall.com/cards/normal/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","colorcategory":"g","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"4ccdef9c-1e85-4358-8059-8972479f7556"}]},"194b7a1c-291a-470e-9a40-61b72a46793b":{"color_identity":["G"],"set":"eld","collector_number":"156","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Garenbrig Carver","name_lower":"garenbrig carver","full_name":"Garenbrig Carver [eld-156]","artist":"Lucas Graciano","scryfall_uri":"https://scryfall.com/card/eld/156/garenbrig-carver-shields-might?utm_source=api","rarity":"common","oracle_text":"\nTarget creature gets +2/+2 until end of turn. (Then exile this card. You may cast the creature later from exile.)","_id":"194b7a1c-291a-470e-9a40-61b72a46793b","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["g","1","split","g","3"],"colors":["G"],"type":"Creature — Human Warrior","full_art":false,"language":"en","tcgplayer_id":199347,"power":"3","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","image_normal":"https://img.scryfall.com/cards/normal/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","art_crop":"https://img.scryfall.com/cards/art_crop/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","colorcategory":"g"},"06bd1ad2-fb5d-4aef-87d1-13a341c686fa":{"color_identity":["G"],"set":"eld","collector_number":"155","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Flaxen Intruder","name_lower":"flaxen intruder","full_name":"Flaxen Intruder [eld-155]","artist":"Gabor Szikszai","scryfall_uri":"https://scryfall.com/card/eld/155/flaxen-intruder-welcome-home?utm_source=api","rarity":"uncommon","oracle_text":"Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.\nCreate three 2/2 green Bear creature tokens. (Then exile this card. You may cast the creature later from exile.)","_id":"06bd1ad2-fb5d-4aef-87d1-13a341c686fa","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","g","5","split","g"],"colors":["G"],"type":"Creature — Human Berserker","full_art":false,"language":"en","tcgplayer_id":198574,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","image_normal":"https://img.scryfall.com/cards/normal/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","colorcategory":"g","tokens":[{"tokenId":"b0f09f9e-e0f9-4ed8-bfc0-5f1a3046106e","sourceCardId":"06bd1ad2-fb5d-4aef-87d1-13a341c686fa"}]},"7f78a570-d776-42f2-a609-6da0156c8de7":{"color_identity":["G"],"set":"eld","collector_number":"150","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Curious Pair","name_lower":"curious pair","full_name":"Curious Pair [eld-150]","artist":"Daarken","scryfall_uri":"https://scryfall.com/card/eld/150/curious-pair-treats-to-share?utm_source=api","rarity":"common","oracle_text":"\nCreate a Food token. (Then exile this card. You may cast the creature later from exile. A Food token is an artifact with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")","_id":"7f78a570-d776-42f2-a609-6da0156c8de7","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["g","split","g","1"],"colors":["G"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":198863,"power":"1","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","colorcategory":"g","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"7f78a570-d776-42f2-a609-6da0156c8de7"}]},"a66f5ea7-ddbb-4b89-b812-77bd17972cf9":{"color_identity":["G"],"set":"eld","collector_number":"149","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Beanstalk Giant","name_lower":"beanstalk giant","full_name":"Beanstalk Giant [eld-149]","artist":"Jason A. Engle","scryfall_uri":"https://scryfall.com/card/eld/149/beanstalk-giant-fertile-footsteps?utm_source=api","rarity":"uncommon","oracle_text":"Beanstalk Giant's power and toughness are each equal to the number of lands you control.\nSearch your library for a basic land card, put it onto the battlefield, then shuffle your library. (Then exile this card. You may cast the creature later from exile.)","_id":"a66f5ea7-ddbb-4b89-b812-77bd17972cf9","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","2","split","g","6"],"colors":["G"],"type":"Creature — Giant","full_art":false,"language":"en","tcgplayer_id":198419,"power":"*","toughness":"*","image_small":"https://img.scryfall.com/cards/small/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","image_normal":"https://img.scryfall.com/cards/normal/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","colorcategory":"g"},"a3d13d84-01e4-4429-93db-e5afff811527":{"color_identity":["R"],"set":"eld","collector_number":"137","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Rimrock Knight","name_lower":"rimrock knight","full_name":"Rimrock Knight [eld-137]","artist":"Chris Rallis","scryfall_uri":"https://scryfall.com/card/eld/137/rimrock-knight-boulder-rush?utm_source=api","rarity":"common","oracle_text":"Rimrock Knight can't block.\nTarget creature gets +2/+0 until end of turn. (Then exile this card. You may cast the creature later from exile.)","_id":"a3d13d84-01e4-4429-93db-e5afff811527","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["r","split","r","1"],"colors":["R"],"type":"Creature — Dwarf Knight","full_art":false,"language":"en","tcgplayer_id":199534,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","image_normal":"https://img.scryfall.com/cards/normal/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","colorcategory":"r"},"0b4399b6-e67f-40d8-8676-f5db7e04a6c9":{"color_identity":["R"],"set":"eld","collector_number":"131","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Merchant of the Vale","name_lower":"merchant of the vale","full_name":"Merchant of the Vale [eld-131]","artist":"David Gaillet","scryfall_uri":"https://scryfall.com/card/eld/131/merchant-of-the-vale-haggle?utm_source=api","rarity":"common","oracle_text":"{2}{R}, Discard a card: Draw a card.\nYou may discard a card. If you do, draw a card. (Then exile this card. You may cast the creature later from exile.)","_id":"0b4399b6-e67f-40d8-8676-f5db7e04a6c9","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["r","split","r","2"],"colors":["R"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":198998,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","image_normal":"https://img.scryfall.com/cards/normal/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","colorcategory":"r"},"6cc73d16-5ed7-4104-91f6-0997a2080e2e":{"color_identity":["R"],"set":"eld","collector_number":"122","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Embereth Shieldbreaker","name_lower":"embereth shieldbreaker","full_name":"Embereth Shieldbreaker [eld-122]","artist":"Randy Vargas","scryfall_uri":"https://scryfall.com/card/eld/122/embereth-shieldbreaker-battle-display?utm_source=api","rarity":"uncommon","oracle_text":"\nDestroy target artifact. (Then exile this card. You may cast the creature later from exile.)","_id":"6cc73d16-5ed7-4104-91f6-0997a2080e2e","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","split","r","1"],"colors":["R"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198550,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","image_normal":"https://img.scryfall.com/cards/normal/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","colorcategory":"r"},"09fd2d9c-1793-4beb-a3fb-7a869f660cd4":{"color_identity":["R"],"set":"eld","collector_number":"115","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Bonecrusher Giant","name_lower":"bonecrusher giant","full_name":"Bonecrusher Giant [eld-115]","artist":"Victor Adame Minguez","scryfall_uri":"https://scryfall.com/card/eld/115/bonecrusher-giant-stomp?utm_source=api","rarity":"rare","oracle_text":"Whenever Bonecrusher Giant becomes the target of a spell, Bonecrusher Giant deals 2 damage to that spell's controller.\nDamage can't be prevented this turn. Stomp deals 2 damage to any target.","_id":"09fd2d9c-1793-4beb-a3fb-7a869f660cd4","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","1","split","r","2"],"colors":["R"],"type":"Creature — Giant","full_art":false,"language":"en","tcgplayer_id":199035,"power":"4","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","colorcategory":"r"},"f82541f2-b17c-45b4-87ff-f9b46d23578c":{"color_identity":["B"],"set":"eld","collector_number":"105","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Smitten Swordmaster","name_lower":"smitten swordmaster","full_name":"Smitten Swordmaster [eld-105]","artist":"Taylor Ingvarsson","scryfall_uri":"https://scryfall.com/card/eld/105/smitten-swordmaster-curry-favor?utm_source=api","rarity":"common","oracle_text":"Lifelink\nYou gain X life and each opponent loses X life, where X is the number of Knights you control.","_id":"f82541f2-b17c-45b4-87ff-f9b46d23578c","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["b","split","b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198401,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","image_normal":"https://img.scryfall.com/cards/normal/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","colorcategory":"b"},"4dc774b4-3f70-4351-b1b8-8a0193cb3a50":{"color_identity":["B"],"set":"eld","collector_number":"102","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Reaper of Night","name_lower":"reaper of night","full_name":"Reaper of Night [eld-102]","artist":"Jeff Simpson","scryfall_uri":"https://scryfall.com/card/eld/102/reaper-of-night-harvest-fear?utm_source=api","rarity":"common","oracle_text":"Whenever Reaper of Night attacks, if defending player has two or fewer cards in hand, it gains flying until end of turn.\nTarget opponent discards two cards. (Then exile this card. You may cast the creature later from exile.)","_id":"4dc774b4-3f70-4351-b1b8-8a0193cb3a50","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["b","3","split","b","b","5"],"colors":["B"],"type":"Creature — Specter","full_art":false,"language":"en","tcgplayer_id":199528,"power":"4","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","image_normal":"https://img.scryfall.com/cards/normal/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","colorcategory":"b"},"330cc452-4382-401d-9432-ac27ae6e27ad":{"color_identity":["B"],"set":"eld","collector_number":"99","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Order of Midnight","name_lower":"order of midnight","full_name":"Order of Midnight [eld-99]","artist":"Victor Adame Minguez","scryfall_uri":"https://scryfall.com/card/eld/99/order-of-midnight-alter-fate?utm_source=api","rarity":"uncommon","oracle_text":"Flying\nOrder of Midnight can't block.\nReturn target creature card from your graveyard to your hand. (Then exile this card. You may cast the creature later from exile.)","_id":"330cc452-4382-401d-9432-ac27ae6e27ad","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","1","split","b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198405,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","image_normal":"https://img.scryfall.com/cards/normal/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","colorcategory":"b"},"e73d8a84-2c0d-423c-89c7-71de0af9e1ac":{"color_identity":["B"],"set":"eld","collector_number":"97","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Murderous Rider","name_lower":"murderous rider","full_name":"Murderous Rider [eld-97]","artist":"Josh Hass","scryfall_uri":"https://scryfall.com/card/eld/97/murderous-rider-swift-end?utm_source=api","rarity":"rare","oracle_text":"Lifelink\nWhen Murderous Rider dies, put it on the bottom of its owner's library.\nDestroy target creature or planeswalker. You lose 2 life. (Then exile this card. You may cast the creature later from exile.)","_id":"e73d8a84-2c0d-423c-89c7-71de0af9e1ac","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","b","1","split","b","b","1"],"colors":["B"],"type":"Creature — Zombie Knight","full_art":false,"language":"en","tcgplayer_id":198749,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","colorcategory":"b"},"c5f6c745-e46a-42eb-8eca-b7b74ab1245e":{"color_identity":["B"],"set":"eld","collector_number":"90","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Foulmire Knight","name_lower":"foulmire knight","full_name":"Foulmire Knight [eld-90]","artist":"Alex Brock","scryfall_uri":"https://scryfall.com/card/eld/90/foulmire-knight-profane-insight?utm_source=api","rarity":"uncommon","oracle_text":"Deathtouch\nYou draw a card and you lose 1 life. (Then exile this card. You may cast the creature later from exile.)","_id":"c5f6c745-e46a-42eb-8eca-b7b74ab1245e","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["b","2","split","b"],"colors":["B"],"type":"Creature — Zombie Knight","full_art":false,"language":"en","tcgplayer_id":198404,"power":"1","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","colorcategory":"b"},"de2f964a-e4e1-4321-92ad-34b781868e11":{"color_identity":["U"],"set":"eld","collector_number":"61","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Queen of Ice","name_lower":"queen of ice","full_name":"Queen of Ice [eld-61]","artist":"Eric Deschamps","scryfall_uri":"https://scryfall.com/card/eld/61/queen-of-ice-rage-of-winter?utm_source=api","rarity":"common","oracle_text":"Whenever Queen of Ice deals combat damage to a creature, tap that creature. It doesn't untap during its controller's next untap step.\nTap target creature. It doesn't untap during its controller's next untap step. (Then exile this card. You may cast the creature later from exile.)","_id":"de2f964a-e4e1-4321-92ad-34b781868e11","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["u","1","split","u","2"],"colors":["U"],"type":"Creature — Human Noble Wizard","full_art":false,"language":"en","tcgplayer_id":199512,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","image_normal":"https://img.scryfall.com/cards/normal/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","colorcategory":"u"},"ceb7308d-608c-4ede-9496-d795fc5bb271":{"color_identity":["U"],"set":"eld","collector_number":"53","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Merfolk Secretkeeper","name_lower":"merfolk secretkeeper","full_name":"Merfolk Secretkeeper [eld-53]","artist":"Jana Schirmer","scryfall_uri":"https://scryfall.com/card/eld/53/merfolk-secretkeeper-venture-deeper?utm_source=api","rarity":"common","oracle_text":"\nTarget player puts the top four cards of their library into their graveyard. (Then exile this card. You may cast the creature later from exile.)","_id":"ceb7308d-608c-4ede-9496-d795fc5bb271","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["u","split","u"],"colors":["U"],"type":"Creature — Merfolk Wizard","full_art":false,"language":"en","tcgplayer_id":199509,"power":"0","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","image_normal":"https://img.scryfall.com/cards/normal/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","colorcategory":"u"},"7acbd812-b994-4e68-8f95-04222796e994":{"color_identity":["U"],"set":"eld","collector_number":"49","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Hypnotic Sprite","name_lower":"hypnotic sprite","full_name":"Hypnotic Sprite [eld-49]","artist":"Irina Nordsol","scryfall_uri":"https://scryfall.com/card/eld/49/hypnotic-sprite-mesmeric-glare?utm_source=api","rarity":"uncommon","oracle_text":"Flying\nCounter target spell with converted mana cost 3 or less. (Then exile this card. You may cast the creature later from exile.)","_id":"7acbd812-b994-4e68-8f95-04222796e994","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","2","split","u","u"],"colors":["U"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":198792,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","image_normal":"https://img.scryfall.com/cards/normal/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","colorcategory":"u"},"e3435fd6-8f51-4d99-a278-4ddb088acfe1":{"color_identity":["U"],"set":"eld","collector_number":"44","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fae of Wishes","name_lower":"fae of wishes","full_name":"Fae of Wishes [eld-44]","artist":"Magali Villeneuve","scryfall_uri":"https://scryfall.com/card/eld/44/fae-of-wishes-granted?utm_source=api","rarity":"rare","oracle_text":"Flying\n{1}{U}, Discard two cards: Return Fae of Wishes to its owner's hand.\nYou may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.","_id":"e3435fd6-8f51-4d99-a278-4ddb088acfe1","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","3","split","u","1"],"colors":["U"],"type":"Creature — Faerie Wizard","full_art":false,"language":"en","tcgplayer_id":199346,"power":"1","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","colorcategory":"u"},"c2089ec9-0665-448f-bfe9-d181de127814":{"color_identity":["U"],"set":"eld","collector_number":"39","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Brazen Borrower","name_lower":"brazen borrower","full_name":"Brazen Borrower [eld-39]","artist":"Eric Deschamps","scryfall_uri":"https://scryfall.com/card/eld/39/brazen-borrower-petty-theft?utm_source=api","rarity":"mythic","oracle_text":"Flash\nFlying\nBrazen Borrower can block only creatures with flying.\nReturn target nonland permanent an opponent controls to its owner's hand.","_id":"c2089ec9-0665-448f-bfe9-d181de127814","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","1","split","u","u","1"],"colors":["U"],"type":"Creature — Faerie Rogue","full_art":false,"language":"en","tcgplayer_id":199387,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","image_normal":"https://img.scryfall.com/cards/normal/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","colorcategory":"u"},"32158458-42eb-41bc-a15a-11af28463eb0":{"color_identity":["U"],"set":"eld","collector_number":"38","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Animating Faerie","name_lower":"animating faerie","full_name":"Animating Faerie [eld-38]","artist":"Joseph Meehan","scryfall_uri":"https://scryfall.com/card/eld/38/animating-faerie-bring-to-life?utm_source=api","rarity":"uncommon","oracle_text":"Flying\nTarget noncreature artifact you control becomes a 0/0 artifact creature. Put four +1/+1 counters on it.","_id":"32158458-42eb-41bc-a15a-11af28463eb0","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","2","split","u","2"],"colors":["U"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":198549,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","image_normal":"https://img.scryfall.com/cards/normal/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","colorcategory":"u"},"7bd105f3-fa33-4490-aea9-b47ca121b664":{"color_identity":["W"],"set":"eld","collector_number":"31","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Silverflame Squire","name_lower":"silverflame squire","full_name":"Silverflame Squire [eld-31]","artist":"Lie Setiawan","scryfall_uri":"https://scryfall.com/card/eld/31/silverflame-squire-on-alert?utm_source=api","rarity":"common","oracle_text":"\nTarget creature gets +2/+2 until end of turn. Untap it. (Then exile this spell. You may cast the creature later from exile.)","_id":"7bd105f3-fa33-4490-aea9-b47ca121b664","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["w","2","split","w","1"],"colors":["W"],"type":"Creature — Human Soldier","full_art":false,"language":"en","tcgplayer_id":199211,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","image_normal":"https://img.scryfall.com/cards/normal/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","colorcategory":"w"},"c0b4f0ce-0d18-4546-803d-94a2f4f30951":{"color_identity":["W"],"set":"eld","collector_number":"28","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Shepherd of the Flock","name_lower":"shepherd of the flock","full_name":"Shepherd of the Flock [eld-28]","artist":"Drew Baker","scryfall_uri":"https://scryfall.com/card/eld/28/shepherd-of-the-flock-usher-to-safety?utm_source=api","rarity":"uncommon","oracle_text":"\nReturn target permanent you control to its owner's hand. (Then exile this card. You may cast the creature later from exile.)","_id":"c0b4f0ce-0d18-4546-803d-94a2f4f30951","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","split","w","1"],"colors":["W"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":199345,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","image_normal":"https://img.scryfall.com/cards/normal/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","colorcategory":"w"},"9e5c8cf1-1d7c-49e5-bfad-7e13c418118f":{"color_identity":["W"],"set":"eld","collector_number":"26","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Realm-Cloaked Giant","name_lower":"realm-cloaked giant","full_name":"Realm-Cloaked Giant [eld-26]","artist":"Adam Paquette","scryfall_uri":"https://scryfall.com/card/eld/26/realm-cloaked-giant-cast-off?utm_source=api","rarity":"mythic","oracle_text":"Vigilance\nDestroy all non-Giant creatures. (Then exile this card. You may cast the creature later from exile.)","_id":"9e5c8cf1-1d7c-49e5-bfad-7e13c418118f","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","w","3","split","w","w","5"],"colors":["W"],"type":"Creature — Giant","full_art":false,"language":"en","tcgplayer_id":199302,"power":"7","toughness":"7","image_small":"https://img.scryfall.com/cards/small/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","image_normal":"https://img.scryfall.com/cards/normal/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","colorcategory":"w"},"99083707-2152-42c0-b5c3-b4f97ec20190":{"color_identity":["W"],"set":"eld","collector_number":"21","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Lonesome Unicorn","name_lower":"lonesome unicorn","full_name":"Lonesome Unicorn [eld-21]","artist":"Winona Nelson","scryfall_uri":"https://scryfall.com/card/eld/21/lonesome-unicorn-rider-in-need?utm_source=api","rarity":"common","oracle_text":"Vigilance\nCreate a 2/2 white Knight creature token with vigilance. (Then exile this card. You may cast the creature later from exile.)","_id":"99083707-2152-42c0-b5c3-b4f97ec20190","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["w","2","split","w","4"],"colors":["W"],"type":"Creature — Unicorn","full_art":false,"language":"en","tcgplayer_id":199217,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","image_normal":"https://img.scryfall.com/cards/normal/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","colorcategory":"w","tokens":[{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"99083707-2152-42c0-b5c3-b4f97ec20190"}]},"75754468-2850-42e6-ab22-61ff7b9d1214":{"color_identity":["W"],"set":"eld","collector_number":"14","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Giant Killer","name_lower":"giant killer","full_name":"Giant Killer [eld-14]","artist":"Jesper Ejsing","scryfall_uri":"https://scryfall.com/card/eld/14/giant-killer-chop-down?utm_source=api","rarity":"rare","oracle_text":"{1}{W}, {T}: Tap target creature.\nDestroy target creature with power 4 or greater. (Then exile this card. You may cast the creature later from exile.)","_id":"75754468-2850-42e6-ab22-61ff7b9d1214","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["w","2","split","w"],"colors":["W"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":198743,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","image_normal":"https://img.scryfall.com/cards/normal/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","colorcategory":"w"},"e8bbece8-9620-44d9-b991-350fe952538a":{"color_identity":["W"],"set":"eld","collector_number":"11","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Faerie Guidemother","name_lower":"faerie guidemother","full_name":"Faerie Guidemother [eld-11]","artist":"Mila Pesic","scryfall_uri":"https://scryfall.com/card/eld/11/faerie-guidemother-gift-of-the-fae?utm_source=api","rarity":"common","oracle_text":"Flying\nTarget creature gets +2/+1 and gains flying until end of turn. (Then exile this card. You may cast the creature later from exile.)","_id":"e8bbece8-9620-44d9-b991-350fe952538a","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["w","1","split","w"],"colors":["W"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":198707,"power":"1","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","image_normal":"https://img.scryfall.com/cards/normal/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","colorcategory":"w"},"c7d5e394-8e41-442e-ae97-a478a61e1b9d":{"color_identity":["W"],"set":"eld","collector_number":"5","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Ardenvale Tactician","name_lower":"ardenvale tactician","full_name":"Ardenvale Tactician [eld-5]","artist":"Jason Rainville","scryfall_uri":"https://scryfall.com/card/eld/5/ardenvale-tactician-dizzying-swoop?utm_source=api","rarity":"common","oracle_text":"Flying\nTap up to two target creatures. (Then exile this card. You may cast the creature later from exile.)","_id":"c7d5e394-8e41-442e-ae97-a478a61e1b9d","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["w","1","split","w","w","1"],"colors":["W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198997,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","colorcategory":"w"},"6a7111f3-01a6-4311-bc08-036a1fba60f5":{"color_identity":["R","U"],"set":"eld","collector_number":"199","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Royal Scions","name_lower":"the royal scions","full_name":"The Royal Scions [eld-199]","artist":"Paul Scott Canavan","scryfall_uri":"https://scryfall.com/card/eld/199/the-royal-scions?utm_source=api","rarity":"mythic","oracle_text":"+1: Draw a card, then discard a card.\n+1: Target creature gets +2/+0 and gains first strike and trample until end of turn.\n−8: Draw four cards. When you do, The Royal Scions deals damage to any target equal to the number of cards in your hand.","_id":"6a7111f3-01a6-4311-bc08-036a1fba60f5","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["r","u","1"],"colors":["R","U"],"type":"Legendary Planeswalker — Will Rowan","full_art":false,"language":"en","tcgplayer_id":198882,"loyalty":"5","image_small":"https://img.scryfall.com/cards/small/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","colorcategory":"m"},"3462a3d0-5552-49fa-9eb7-100960c55891":{"color_identity":["G","U"],"set":"eld","collector_number":"197","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Oko, Thief of Crowns","name_lower":"oko, thief of crowns","full_name":"Oko, Thief of Crowns [eld-197]","artist":"Yongjae Choi","scryfall_uri":"https://scryfall.com/card/eld/197/oko-thief-of-crowns?utm_source=api","rarity":"mythic","oracle_text":"+2: Create a Food token. (It's an artifact with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")\n+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.\n−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.","_id":"3462a3d0-5552-49fa-9eb7-100960c55891","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["u","g","1"],"colors":["G","U"],"type":"Legendary Planeswalker — Oko","full_art":false,"language":"en","tcgplayer_id":198356,"loyalty":"4","image_small":"https://img.scryfall.com/cards/small/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631","image_normal":"https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631","colorcategory":"m","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"3462a3d0-5552-49fa-9eb7-100960c55891"}]},"abef512f-8f1d-4257-b16f-c0eed58670ec":{"color_identity":["B","G"],"set":"eld","collector_number":"191","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Garruk, Cursed Huntsman","name_lower":"garruk, cursed huntsman","full_name":"Garruk, Cursed Huntsman [eld-191]","artist":"Eric Deschamps","scryfall_uri":"https://scryfall.com/card/eld/191/garruk-cursed-huntsman?utm_source=api","rarity":"mythic","oracle_text":"0: Create two 2/2 black and green Wolf creature tokens with \"When this creature dies, put a loyalty counter on each Garruk you control.\"\n−3: Destroy target creature. Draw a card.\n−6: You get an emblem with \"Creatures you control get +3/+3 and have trample.\"","_id":"abef512f-8f1d-4257-b16f-c0eed58670ec","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["g","b","4"],"colors":["B","G"],"type":"Legendary Planeswalker — Garruk","full_art":false,"language":"en","tcgplayer_id":198500,"loyalty":"5","image_small":"https://img.scryfall.com/cards/small/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","image_normal":"https://img.scryfall.com/cards/normal/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","colorcategory":"m","tokens":[{"tokenId":"d6c65749-1774-4b36-891e-abf762c95cec","sourceCardId":"abef512f-8f1d-4257-b16f-c0eed58670ec"}]},"ec1f1041-f667-4b73-b1f2-e5bcae84095e":{"color_identity":[],"set":"eld","collector_number":"333","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Command Tower","name_lower":"command tower","full_name":"Command Tower [eld-333]","artist":"Evan Shipard","scryfall_uri":"https://scryfall.com/card/eld/333/command-tower?utm_source=api","rarity":"common","oracle_text":"{T}: Add one mana of any color in your commander's color identity.","_id":"ec1f1041-f667-4b73-b1f2-e5bcae84095e","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":198815,"image_small":"https://img.scryfall.com/cards/small/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","image_normal":"https://img.scryfall.com/cards/normal/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","colorcategory":"l"},"040301e8-20c1-4f4c-8766-d05f11415efd":{"color_identity":[],"set":"eld","collector_number":"332","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Tome of Legends","name_lower":"tome of legends","full_name":"Tome of Legends [eld-332]","artist":"Mila Pesic","scryfall_uri":"https://scryfall.com/card/eld/332/tome-of-legends?utm_source=api","rarity":"rare","oracle_text":"Tome of Legends enters the battlefield with a page counter on it.\nWhenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends.\n{1}, {T}, Remove a page counter from Tome of Legends: Draw a card.","_id":"040301e8-20c1-4f4c-8766-d05f11415efd","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":false},"parsed_cost":["2"],"colors":[],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198443,"image_small":"https://img.scryfall.com/cards/small/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","image_normal":"https://img.scryfall.com/cards/normal/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","colorcategory":"c"},"84128e98-87d6-4c2f-909b-9435a7833e63":{"color_identity":[],"set":"eld","collector_number":"331","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Arcane Signet","name_lower":"arcane signet","full_name":"Arcane Signet [eld-331]","artist":"Dan Scott","scryfall_uri":"https://scryfall.com/card/eld/331/arcane-signet?utm_source=api","rarity":"common","oracle_text":"{T}: Add one mana of any color in your commander's color identity.","_id":"84128e98-87d6-4c2f-909b-9435a7833e63","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pauper":true},"parsed_cost":["2"],"colors":[],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":194913,"image_small":"https://img.scryfall.com/cards/small/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","image_normal":"https://img.scryfall.com/cards/normal/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","colorcategory":"c"}} \ No newline at end of file +{"0c3f372d-259d-4a31-9491-2d369b3f3f8b":{"color_identity":["R","W"],"set":"eld","collector_number":"194","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Inspiring Veteran","name_lower":"inspiring veteran","full_name":"Inspiring Veteran [eld-194]","artist":"Scott Murphy","scryfall_uri":"https://scryfall.com/card/eld/194/inspiring-veteran?utm_source=api","rarity":"uncommon","oracle_text":"Other Knights you control get +1/+1.","_id":"0c3f372d-259d-4a31-9491-2d369b3f3f8b","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","r"],"colors":["R","W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198561,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","image_normal":"https://img.scryfall.com/cards/normal/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","colorcategory":"m"},"0461867b-ec35-4d37-a398-5247e06c4afe":{"color_identity":["R","U"],"set":"eld","collector_number":"193","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Improbable Alliance","name_lower":"improbable alliance","full_name":"Improbable Alliance [eld-193]","artist":"Zoltan Boros","scryfall_uri":"https://scryfall.com/card/eld/193/improbable-alliance?utm_source=api","rarity":"uncommon","oracle_text":"Whenever you draw your second card each turn, create a 1/1 blue Faerie creature token with flying.\n{4}{U}{R}: Draw a card, then discard a card.","_id":"0461867b-ec35-4d37-a398-5247e06c4afe","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","u"],"colors":["R","U"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199403,"image_small":"https://img.scryfall.com/cards/small/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","image_normal":"https://img.scryfall.com/cards/normal/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","colorcategory":"m","tokens":[{"tokenId":"bcd82cb0-ff4b-4f4d-b3d0-3ac53883b099","sourceCardId":"0461867b-ec35-4d37-a398-5247e06c4afe"}]},"6da7cd39-1f8a-4f68-adb7-df2beac02263":{"color_identity":["G"],"set":"eld","collector_number":"164","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Kenrith's Transformation","name_lower":"kenrith's transformation","full_name":"Kenrith's Transformation [eld-164]","artist":"Kimonas Theodossiou","scryfall_uri":"https://scryfall.com/card/eld/164/kenriths-transformation?utm_source=api","rarity":"uncommon","oracle_text":"Enchant creature\nWhen Kenrith's Transformation enters the battlefield, draw a card.\nEnchanted creature loses all abilities and is a green Elk creature with base power and toughness 3/3. (It loses all other card types and creature types.)","_id":"6da7cd39-1f8a-4f68-adb7-df2beac02263","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","1"],"colors":["G"],"type":"Enchantment — Aura","full_art":false,"language":"en","tcgplayer_id":199539,"image_small":"https://img.scryfall.com/cards/small/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","image_normal":"https://img.scryfall.com/cards/normal/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","colorcategory":"g"},"83b5b110-c430-4ffe-9fc1-8e6987f52d1e":{"color_identity":["R"],"set":"eld","collector_number":"143","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Slaying Fire","name_lower":"slaying fire","full_name":"Slaying Fire [eld-143]","artist":"Heonhwa Choe","scryfall_uri":"https://scryfall.com/card/eld/143/slaying-fire?utm_source=api","rarity":"uncommon","oracle_text":"Slaying Fire deals 3 damage to any target.\nAdamant — If at least three red mana was spent to cast this spell, it deals 4 damage instead.","_id":"83b5b110-c430-4ffe-9fc1-8e6987f52d1e","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","2"],"colors":["R"],"type":"Instant","full_art":false,"language":"en","tcgplayer_id":198422,"image_small":"https://img.scryfall.com/cards/small/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","image_normal":"https://img.scryfall.com/cards/normal/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","colorcategory":"r"},"562f1c51-d245-4771-bf61-415297e4f9d5":{"color_identity":["W"],"set":"eld","collector_number":"15","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Glass Casket","name_lower":"glass casket","full_name":"Glass Casket [eld-15]","artist":"Anastasia Ovchinnikova","scryfall_uri":"https://scryfall.com/card/eld/15/glass-casket?utm_source=api","rarity":"uncommon","oracle_text":"When Glass Casket enters the battlefield, exile target creature an opponent controls with converted mana cost 3 or less until Glass Casket leaves the battlefield.","_id":"562f1c51-d245-4771-bf61-415297e4f9d5","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":199004,"image_small":"https://img.scryfall.com/cards/small/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","image_normal":"https://img.scryfall.com/cards/normal/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","colorcategory":"w"},"0a7962fe-b715-4981-86c3-223bad9b1899":{"color_identity":["B"],"set":"eld","collector_number":"100","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Piper of the Swarm","name_lower":"piper of the swarm","full_name":"Piper of the Swarm [eld-100]","artist":"Irina Nordsol","scryfall_uri":"https://scryfall.com/card/eld/100/piper-of-the-swarm?utm_source=api","rarity":"rare","oracle_text":"Rats you control have menace.\n{1}{B}, {T}: Create a 1/1 black Rat creature token.\n{2}{B}{B}, {T}, Sacrifice three Rats: Gain control of target creature.","_id":"0a7962fe-b715-4981-86c3-223bad9b1899","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","1"],"colors":["B"],"type":"Creature — Human Warlock","full_art":false,"language":"en","tcgplayer_id":198582,"power":"1","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","colorcategory":"b","tokens":[{"tokenId":"e43a205e-43ea-4b3e-92ab-c2ee2172a50a","sourceCardId":"0a7962fe-b715-4981-86c3-223bad9b1899"}]},"b841bfa8-7c17-4df2-8466-780ab9a4a53a":{"color_identity":[],"set":"eld","collector_number":"244","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fabled Passage","name_lower":"fabled passage","full_name":"Fabled Passage [eld-244]","artist":"Howard Lyon","scryfall_uri":"https://scryfall.com/card/eld/244/fabled-passage?utm_source=api","rarity":"rare","oracle_text":"{T}, Sacrifice Fabled Passage: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. Then if you control four or more lands, untap that land.","_id":"b841bfa8-7c17-4df2-8466-780ab9a4a53a","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199428,"image_small":"https://img.scryfall.com/cards/small/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","colorcategory":"l"},"0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b":{"color_identity":["U"],"set":"eld","collector_number":"242","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Vantress","name_lower":"castle vantress","full_name":"Castle Vantress [eld-242]","artist":"John Avon","scryfall_uri":"https://scryfall.com/card/eld/242/castle-vantress?utm_source=api","rarity":"rare","oracle_text":"Castle Vantress enters the battlefield tapped unless you control an Island.\n{T}: Add {U}.\n{2}{U}{U}, {T}: Scry 2.","_id":"0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199284,"image_small":"https://img.scryfall.com/cards/small/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","colorcategory":"l"},"195383c1-4723-40b0-ba53-298dfd8e30d0":{"color_identity":["B"],"set":"eld","collector_number":"241","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Locthwain","name_lower":"castle locthwain","full_name":"Castle Locthwain [eld-241]","artist":"Titus Lunter","scryfall_uri":"https://scryfall.com/card/eld/241/castle-locthwain?utm_source=api","rarity":"rare","oracle_text":"Castle Locthwain enters the battlefield tapped unless you control a Swamp.\n{T}: Add {B}.\n{1}{B}{B}, {T}: Draw a card, then you lose life equal to the number of cards in your hand.","_id":"195383c1-4723-40b0-ba53-298dfd8e30d0","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199388,"image_small":"https://img.scryfall.com/cards/small/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","image_normal":"https://img.scryfall.com/cards/normal/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","art_crop":"https://img.scryfall.com/cards/art_crop/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","colorcategory":"l"},"e3c2c66c-f7f0-41d5-a805-a129aeaf1b75":{"color_identity":["G"],"set":"eld","collector_number":"240","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Garenbrig","name_lower":"castle garenbrig","full_name":"Castle Garenbrig [eld-240]","artist":"Adam Paquette","scryfall_uri":"https://scryfall.com/card/eld/240/castle-garenbrig?utm_source=api","rarity":"rare","oracle_text":"Castle Garenbrig enters the battlefield tapped unless you control a Forest.\n{T}: Add {G}.\n{2}{G}{G}, {T}: Add six {G}. Spend this mana only to cast creature spells or activate abilities of creatures.","_id":"e3c2c66c-f7f0-41d5-a805-a129aeaf1b75","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199288,"image_small":"https://img.scryfall.com/cards/small/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","colorcategory":"l"},"8bb8512e-6913-4be6-8828-24cfcbec042e":{"color_identity":["R"],"set":"eld","collector_number":"239","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Embereth","name_lower":"castle embereth","full_name":"Castle Embereth [eld-239]","artist":"Jaime Jones","scryfall_uri":"https://scryfall.com/card/eld/239/castle-embereth?utm_source=api","rarity":"rare","oracle_text":"Castle Embereth enters the battlefield tapped unless you control a Mountain.\n{T}: Add {R}.\n{1}{R}{R}, {T}: Creatures you control get +1/+0 until end of turn.","_id":"8bb8512e-6913-4be6-8828-24cfcbec042e","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199286,"image_small":"https://img.scryfall.com/cards/small/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","colorcategory":"l"},"7f910495-8bd7-4134-a281-c16fd666d5cc":{"color_identity":["W"],"set":"eld","collector_number":"238","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Castle Ardenvale","name_lower":"castle ardenvale","full_name":"Castle Ardenvale [eld-238]","artist":"Volkan Baǵa","scryfall_uri":"https://scryfall.com/card/eld/238/castle-ardenvale?utm_source=api","rarity":"rare","oracle_text":"Castle Ardenvale enters the battlefield tapped unless you control a Plains.\n{T}: Add {W}.\n{2}{W}{W}, {T}: Create a 1/1 white Human creature token.","_id":"7f910495-8bd7-4134-a281-c16fd666d5cc","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":199390,"image_small":"https://img.scryfall.com/cards/small/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","colorcategory":"l","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"7f910495-8bd7-4134-a281-c16fd666d5cc"}]},"b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe":{"color_identity":[],"set":"eld","collector_number":"235","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Stonecoil Serpent","name_lower":"stonecoil serpent","full_name":"Stonecoil Serpent [eld-235]","artist":"Mark Poole","scryfall_uri":"https://scryfall.com/card/eld/235/stonecoil-serpent?utm_source=api","rarity":"rare","oracle_text":"Reach, trample, protection from multicolored\nStonecoil Serpent enters the battlefield with X +1/+1 counters on it.","_id":"b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["x"],"colors":[],"type":"Artifact Creature — Snake","full_art":false,"language":"en","tcgplayer_id":199257,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","image_normal":"https://img.scryfall.com/cards/normal/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","colorcategory":"c"},"e47e85d1-8c4a-43a9-92b3-7cb2a5b89219":{"color_identity":[],"set":"eld","collector_number":"233","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Sorcerous Spyglass","name_lower":"sorcerous spyglass","full_name":"Sorcerous Spyglass [eld-233]","artist":"Aaron Miller","scryfall_uri":"https://scryfall.com/card/eld/233/sorcerous-spyglass?utm_source=api","rarity":"rare","oracle_text":"As Sorcerous Spyglass enters the battlefield, look at an opponent's hand, then choose any card name.\nActivated abilities of sources with the chosen name can't be activated unless they're mana abilities.","_id":"e47e85d1-8c4a-43a9-92b3-7cb2a5b89219","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["2"],"colors":[],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198975,"image_small":"https://img.scryfall.com/cards/small/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","colorcategory":"c"},"27425f2e-e0b2-489d-877d-8257d2026bfd":{"color_identity":["B","R"],"set":"eld","collector_number":"203","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Stormfist Crusader","name_lower":"stormfist crusader","full_name":"Stormfist Crusader [eld-203]","artist":"Chris Rallis","scryfall_uri":"https://scryfall.com/card/eld/203/stormfist-crusader?utm_source=api","rarity":"rare","oracle_text":"Menace\nAt the beginning of your upkeep, each player draws a card and loses 1 life.","_id":"27425f2e-e0b2-489d-877d-8257d2026bfd","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","b"],"colors":["B","R"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199425,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","image_normal":"https://img.scryfall.com/cards/normal/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","art_crop":"https://img.scryfall.com/cards/art_crop/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","colorcategory":"m"},"5d7585ab-a364-471c-8ef1-318e459b4020":{"color_identity":["R","W"],"set":"eld","collector_number":"198","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Outlaws' Merriment","name_lower":"outlaws' merriment","full_name":"Outlaws' Merriment [eld-198]","artist":"Suzanne Helmigh","scryfall_uri":"https://scryfall.com/card/eld/198/outlaws-merriment?utm_source=api","rarity":"mythic","oracle_text":"At the beginning of your upkeep, choose one at random. Create a red and white creature token with those characteristics.\n• 3/1 Human Warrior with trample and haste.\n• 2/1 Human Cleric with lifelink and haste.\n• 1/2 Human Rogue with haste and \"When this creature enters the battlefield, it deals 1 damage to any target.\"","_id":"5d7585ab-a364-471c-8ef1-318e459b4020","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","w","r","1"],"colors":["R","W"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":198849,"image_small":"https://img.scryfall.com/cards/small/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","colorcategory":"m","tokens":[{"tokenId":"db951f76-b785-453e-91b9-b3b8a5c1cfd4","sourceCardId":"5d7585ab-a364-471c-8ef1-318e459b4020"},{"tokenId":"cd3ca6d5-4b2c-46d4-95f3-f0f2fa47f447","sourceCardId":"5d7585ab-a364-471c-8ef1-318e459b4020"},{"tokenId":"c994ea90-71f4-403f-9418-2b72cc2de14d","sourceCardId":"5d7585ab-a364-471c-8ef1-318e459b4020"}]},"3287beea-747c-4cb6-aea5-051e85c5de8d":{"color_identity":["B","U"],"set":"eld","collector_number":"195","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Lochmere Serpent","name_lower":"lochmere serpent","full_name":"Lochmere Serpent [eld-195]","artist":"Sam Burley","scryfall_uri":"https://scryfall.com/card/eld/195/lochmere-serpent?utm_source=api","rarity":"rare","oracle_text":"Flash\n{U}, Sacrifice an Island: Lochmere Serpent can't be blocked this turn.\n{B}, Sacrifice a Swamp: You gain 1 life and draw a card.\n{U}{B}: Exile five target cards from an opponent's graveyard. Return Lochmere Serpent from your graveyard to your hand. Activate this ability only any time you could cast a sorcery.","_id":"3287beea-747c-4cb6-aea5-051e85c5de8d","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","u","4"],"colors":["B","U"],"type":"Creature — Serpent","full_art":false,"language":"en","tcgplayer_id":198775,"power":"7","toughness":"7","image_small":"https://img.scryfall.com/cards/small/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","image_normal":"https://img.scryfall.com/cards/normal/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","colorcategory":"m"},"1ca29912-88b1-413f-ad9d-63d7d1b1ca16":{"color_identity":["G","W"],"set":"eld","collector_number":"190","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Faeburrow Elder","name_lower":"faeburrow elder","full_name":"Faeburrow Elder [eld-190]","artist":"Raoul Vitale","scryfall_uri":"https://scryfall.com/card/eld/190/faeburrow-elder?utm_source=api","rarity":"rare","oracle_text":"Vigilance\nFaeburrow Elder gets +1/+1 for each color among permanents you control.\n{T}: For each color among permanents you control, add one mana of that color.","_id":"1ca29912-88b1-413f-ad9d-63d7d1b1ca16","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","g","1"],"colors":["G","W"],"type":"Creature — Treefolk Druid","full_art":false,"language":"en","tcgplayer_id":199026,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","image_normal":"https://img.scryfall.com/cards/normal/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","art_crop":"https://img.scryfall.com/cards/art_crop/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","colorcategory":"m"},"3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9":{"color_identity":["G","R"],"set":"eld","collector_number":"189","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Escape to the Wilds","name_lower":"escape to the wilds","full_name":"Escape to the Wilds [eld-189]","artist":"Chris Ostrowski","scryfall_uri":"https://scryfall.com/card/eld/189/escape-to-the-wilds?utm_source=api","rarity":"rare","oracle_text":"Exile the top five cards of your library. You may play cards exiled this way until the end of your next turn.\nYou may play an additional land this turn.","_id":"3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","r","3"],"colors":["G","R"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199297,"image_small":"https://img.scryfall.com/cards/small/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","image_normal":"https://img.scryfall.com/cards/normal/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","colorcategory":"m"},"e76c0c83-3e87-474d-bc72-1677eed32cfa":{"color_identity":["B","W"],"set":"eld","collector_number":"187","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Doom Foretold","name_lower":"doom foretold","full_name":"Doom Foretold [eld-187]","artist":"Daniel Ljunggren","scryfall_uri":"https://scryfall.com/card/eld/187/doom-foretold?utm_source=api","rarity":"rare","oracle_text":"At the beginning of each player's upkeep, that player sacrifices a nonland, nontoken permanent. If that player can't, they discard a card, they lose 2 life, you draw a card, you gain 2 life, you create a 2/2 white Knight creature token with vigilance, then you sacrifice Doom Foretold.","_id":"e76c0c83-3e87-474d-bc72-1677eed32cfa","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","w","2"],"colors":["B","W"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":198873,"image_small":"https://img.scryfall.com/cards/small/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","colorcategory":"m","tokens":[{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"e76c0c83-3e87-474d-bc72-1677eed32cfa"}]},"5dca90ef-1c17-4dcc-9fef-dab9ee92f590":{"color_identity":["U","W"],"set":"eld","collector_number":"186","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Dance of the Manse","name_lower":"dance of the manse","full_name":"Dance of the Manse [eld-186]","artist":"Yeong-Hao Han","scryfall_uri":"https://scryfall.com/card/eld/186/dance-of-the-manse?utm_source=api","rarity":"rare","oracle_text":"Return up to X target artifact and/or non-Aura enchantment cards each with converted mana cost X or less from your graveyard to the battlefield. If X is 6 or more, those permanents are 4/4 creatures in addition to their other types.","_id":"5dca90ef-1c17-4dcc-9fef-dab9ee92f590","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","w","x"],"colors":["U","W"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199024,"image_small":"https://img.scryfall.com/cards/small/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","colorcategory":"m"},"ae2998a1-1713-467e-a08e-0efd8720aa5b":{"color_identity":["G"],"set":"eld","collector_number":"185","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Yorvo, Lord of Garenbrig","name_lower":"yorvo, lord of garenbrig","full_name":"Yorvo, Lord of Garenbrig [eld-185]","artist":"Zack Stella","scryfall_uri":"https://scryfall.com/card/eld/185/yorvo-lord-of-garenbrig?utm_source=api","rarity":"rare","oracle_text":"Yorvo, Lord of Garenbrig enters the battlefield with four +1/+1 counters on it.\nWhenever another green creature enters the battlefield under your control, put a +1/+1 counter on Yorvo. Then if that creature's power is greater than Yorvo's power, put another +1/+1 counter on Yorvo.","_id":"ae2998a1-1713-467e-a08e-0efd8720aa5b","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","g","g"],"colors":["G"],"type":"Legendary Creature — Giant Noble","full_art":false,"language":"en","tcgplayer_id":199295,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","image_normal":"https://img.scryfall.com/cards/normal/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","colorcategory":"g"},"55f76830-369e-4224-9ded-7d1ce04c87e4":{"color_identity":["G"],"set":"eld","collector_number":"182","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Wildborn Preserver","name_lower":"wildborn preserver","full_name":"Wildborn Preserver [eld-182]","artist":"Lius Lasahido","scryfall_uri":"https://scryfall.com/card/eld/182/wildborn-preserver?utm_source=api","rarity":"rare","oracle_text":"Flash\nReach\nWhenever another non-Human creature enters the battlefield under your control, you may pay {X}. When you do, put X +1/+1 counters on Wildborn Preserver.","_id":"55f76830-369e-4224-9ded-7d1ce04c87e4","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","1"],"colors":["G"],"type":"Creature — Elf Archer","full_art":false,"language":"en","tcgplayer_id":198781,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","image_normal":"https://img.scryfall.com/cards/normal/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","art_crop":"https://img.scryfall.com/cards/art_crop/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","colorcategory":"g"},"09476eac-55d2-4955-8951-ae4ce117c98b":{"color_identity":["G"],"set":"eld","collector_number":"181","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Wicked Wolf","name_lower":"wicked wolf","full_name":"Wicked Wolf [eld-181]","artist":"Tomasz Jedruszek","scryfall_uri":"https://scryfall.com/card/eld/181/wicked-wolf?utm_source=api","rarity":"rare","oracle_text":"When Wicked Wolf enters the battlefield, it fights up to one target creature you don't control.\nSacrifice a Food: Put a +1/+1 counter on Wicked Wolf. It gains indestructible until end of turn. Tap it.","_id":"09476eac-55d2-4955-8951-ae4ce117c98b","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","g","2"],"colors":["G"],"type":"Creature — Wolf","full_art":false,"language":"en","tcgplayer_id":198764,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","colorcategory":"g"},"b88a4943-bd1b-4d10-9cd3-b2ab91b25c10":{"color_identity":["G"],"set":"eld","collector_number":"172","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Return of the Wildspeaker","name_lower":"return of the wildspeaker","full_name":"Return of the Wildspeaker [eld-172]","artist":"Chris Rallis","scryfall_uri":"https://scryfall.com/card/eld/172/return-of-the-wildspeaker?utm_source=api","rarity":"rare","oracle_text":"Choose one —\n• Draw cards equal to the greatest power among non-Human creatures you control.\n• Non-Human creatures you control get +3/+3 until end of turn.","_id":"b88a4943-bd1b-4d10-9cd3-b2ab91b25c10","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","4"],"colors":["G"],"type":"Instant","full_art":false,"language":"en","tcgplayer_id":199415,"image_small":"https://img.scryfall.com/cards/small/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","colorcategory":"g"},"e41cf82d-3213-47ce-a015-6e51a8b07e4f":{"color_identity":["G"],"set":"eld","collector_number":"171","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Questing Beast","name_lower":"questing beast","full_name":"Questing Beast [eld-171]","artist":"Igor Kieryluk","scryfall_uri":"https://scryfall.com/card/eld/171/questing-beast?utm_source=api","rarity":"mythic","oracle_text":"Vigilance, deathtouch, haste\nQuesting Beast can't be blocked by creatures with power 2 or less.\nCombat damage that would be dealt by creatures you control can't be prevented.\nWhenever Questing Beast deals combat damage to an opponent, it deals that much damage to target planeswalker that player controls.","_id":"e41cf82d-3213-47ce-a015-6e51a8b07e4f","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","g","2"],"colors":["G"],"type":"Legendary Creature — Beast","full_art":false,"language":"en","tcgplayer_id":198763,"power":"4","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","colorcategory":"g"},"4034e5ba-9974-43e3-bde7-8d9b4586c3a4":{"color_identity":["G"],"set":"eld","collector_number":"169","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Once Upon a Time","name_lower":"once upon a time","full_name":"Once Upon a Time [eld-169]","artist":"Matt Stewart","scryfall_uri":"https://scryfall.com/card/eld/169/once-upon-a-time?utm_source=api","rarity":"rare","oracle_text":"If this spell is the first spell you've cast this game, you may cast it without paying its mana cost.\nLook at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.","_id":"4034e5ba-9974-43e3-bde7-8d9b4586c3a4","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","1"],"colors":["G"],"type":"Instant","full_art":false,"language":"en","tcgplayer_id":198710,"image_small":"https://img.scryfall.com/cards/small/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628","image_normal":"https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628","colorcategory":"g"},"af915ed2-1f34-43f6-85f5-2430325b720f":{"color_identity":["G"],"set":"eld","collector_number":"161","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Great Henge","name_lower":"the great henge","full_name":"The Great Henge [eld-161]","artist":"Adam Paquette","scryfall_uri":"https://scryfall.com/card/eld/161/the-great-henge?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {X} less to cast, where X is the greatest power among creatures you control.\n{T}: Add {G}{G}. You gain 2 life.\nWhenever a nontoken creature enters the battlefield under your control, put a +1/+1 counter on it and draw a card.","_id":"af915ed2-1f34-43f6-85f5-2430325b720f","cmc":9,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","g","7"],"colors":["G"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":199361,"image_small":"https://img.scryfall.com/cards/small/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","image_normal":"https://img.scryfall.com/cards/normal/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","colorcategory":"g"},"30377bf0-d9b1-4c14-8dde-f74b1e02d604":{"color_identity":["G"],"set":"eld","collector_number":"160","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Gilded Goose","name_lower":"gilded goose","full_name":"Gilded Goose [eld-160]","artist":"Lindsey Look","scryfall_uri":"https://scryfall.com/card/eld/160/gilded-goose?utm_source=api","rarity":"rare","oracle_text":"Flying\nWhen Gilded Goose enters the battlefield, create a Food token. (It's an artifact with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")\n{1}{G}, {T}: Create a Food token.\n{T}, Sacrifice a Food: Add one mana of any color.","_id":"30377bf0-d9b1-4c14-8dde-f74b1e02d604","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g"],"colors":["G"],"type":"Creature — Bird","full_art":false,"language":"en","tcgplayer_id":198394,"power":"0","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","image_normal":"https://img.scryfall.com/cards/normal/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","colorcategory":"g","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"30377bf0-d9b1-4c14-8dde-f74b1e02d604"},{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"30377bf0-d9b1-4c14-8dde-f74b1e02d604"}]},"9a6bb435-1205-416a-a5a0-ca6d37b4dcb2":{"color_identity":["G"],"set":"eld","collector_number":"152","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Feasting Troll King","name_lower":"feasting troll king","full_name":"Feasting Troll King [eld-152]","artist":"Nicholas Gregory","scryfall_uri":"https://scryfall.com/card/eld/152/feasting-troll-king?utm_source=api","rarity":"rare","oracle_text":"Vigilance, trample\nWhen Feasting Troll King enters the battlefield, if you cast it from your hand, create three Food tokens. (They're artifacts with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")\nSacrifice three Foods: Return Feasting Troll King from your graveyard to the battlefield. Activate this ability only during your turn.","_id":"9a6bb435-1205-416a-a5a0-ca6d37b4dcb2","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","g","g","g","2"],"colors":["G"],"type":"Creature — Troll Noble","full_art":false,"language":"en","tcgplayer_id":198776,"power":"7","toughness":"6","image_small":"https://img.scryfall.com/cards/small/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","colorcategory":"g","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"9a6bb435-1205-416a-a5a0-ca6d37b4dcb2"}]},"79f591cd-d277-4ba5-b1bf-1c09cac9cb8a":{"color_identity":["R"],"set":"eld","collector_number":"147","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Torbran, Thane of Red Fell","name_lower":"torbran, thane of red fell","full_name":"Torbran, Thane of Red Fell [eld-147]","artist":"Grzegorz Rutkowski","scryfall_uri":"https://scryfall.com/card/eld/147/torbran-thane-of-red-fell?utm_source=api","rarity":"rare","oracle_text":"If a red source you control would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 2 instead.","_id":"79f591cd-d277-4ba5-b1bf-1c09cac9cb8a","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","r","r","1"],"colors":["R"],"type":"Legendary Creature — Dwarf Noble","full_art":false,"language":"en","tcgplayer_id":199556,"power":"2","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","colorcategory":"r"},"24b7a774-ca49-4291-8a19-cb5e475b10d5":{"color_identity":["R"],"set":"eld","collector_number":"144","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Sundering Stroke","name_lower":"sundering stroke","full_name":"Sundering Stroke [eld-144]","artist":"Stanton Feng","scryfall_uri":"https://scryfall.com/card/eld/144/sundering-stroke?utm_source=api","rarity":"rare","oracle_text":"Sundering Stroke deals 7 damage divided as you choose among one, two, or three targets. If at least seven red mana was spent to cast this spell, instead Sundering Stroke deals 7 damage to each of those permanents and/or players.","_id":"24b7a774-ca49-4291-8a19-cb5e475b10d5","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","6"],"colors":["R"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199108,"image_small":"https://img.scryfall.com/cards/small/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","image_normal":"https://img.scryfall.com/cards/normal/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","art_crop":"https://img.scryfall.com/cards/art_crop/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","colorcategory":"r"},"0ecbe097-ba51-42e5-957c-382eb66c08f0":{"color_identity":["R"],"set":"eld","collector_number":"138","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Robber of the Rich","name_lower":"robber of the rich","full_name":"Robber of the Rich [eld-138]","artist":"Paul Scott Canavan","scryfall_uri":"https://scryfall.com/card/eld/138/robber-of-the-rich?utm_source=api","rarity":"mythic","oracle_text":"Reach, haste\nWhenever Robber of the Rich attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell.","_id":"0ecbe097-ba51-42e5-957c-382eb66c08f0","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","1"],"colors":["R"],"type":"Creature — Human Archer Rogue","full_art":false,"language":"en","tcgplayer_id":198777,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","image_normal":"https://img.scryfall.com/cards/normal/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","colorcategory":"r"},"3fa16922-3583-4f5b-8805-509b95a8da49":{"color_identity":["R"],"set":"eld","collector_number":"133","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Opportunistic Dragon","name_lower":"opportunistic dragon","full_name":"Opportunistic Dragon [eld-133]","artist":"Chris Rahn","scryfall_uri":"https://scryfall.com/card/eld/133/opportunistic-dragon?utm_source=api","rarity":"rare","oracle_text":"Flying\nWhen Opportunistic Dragon enters the battlefield, choose target Human or artifact an opponent controls. For as long as Opportunistic Dragon remains on the battlefield, gain control of that permanent, it loses all abilities, and it can't attack or block.","_id":"3fa16922-3583-4f5b-8805-509b95a8da49","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","r","2"],"colors":["R"],"type":"Creature — Dragon","full_art":false,"language":"en","tcgplayer_id":198952,"power":"4","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","image_normal":"https://img.scryfall.com/cards/normal/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","colorcategory":"r"},"9a7b0ead-5629-429d-bede-8154f3fae96d":{"color_identity":["R"],"set":"eld","collector_number":"128","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Irencrag Pyromancer","name_lower":"irencrag pyromancer","full_name":"Irencrag Pyromancer [eld-128]","artist":"Jason Rainville","scryfall_uri":"https://scryfall.com/card/eld/128/irencrag-pyromancer?utm_source=api","rarity":"rare","oracle_text":"Whenever you draw your second card each turn, Irencrag Pyromancer deals 3 damage to any target.","_id":"9a7b0ead-5629-429d-bede-8154f3fae96d","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","2"],"colors":["R"],"type":"Creature — Human Wizard","full_art":false,"language":"en","tcgplayer_id":199359,"power":"0","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","colorcategory":"r"},"b5bcf822-e129-45f6-9403-310ce9410f3b":{"color_identity":["R"],"set":"eld","collector_number":"127","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Irencrag Feat","name_lower":"irencrag feat","full_name":"Irencrag Feat [eld-127]","artist":"Yongjae Choi","scryfall_uri":"https://scryfall.com/card/eld/127/irencrag-feat?utm_source=api","rarity":"rare","oracle_text":"Add seven {R}. You can cast only one more spell this turn.","_id":"b5bcf822-e129-45f6-9403-310ce9410f3b","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","r","r","1"],"colors":["R"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":199036,"image_small":"https://img.scryfall.com/cards/small/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","image_normal":"https://img.scryfall.com/cards/normal/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","colorcategory":"r"},"a12b16b0-f75f-42d8-9b24-947c1908e0f7":{"color_identity":["R"],"set":"eld","collector_number":"125","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fires of Invention","name_lower":"fires of invention","full_name":"Fires of Invention [eld-125]","artist":"Stanton Feng","scryfall_uri":"https://scryfall.com/card/eld/125/fires-of-invention?utm_source=api","rarity":"rare","oracle_text":"You can cast spells only during your turn and you can cast no more than two spells each turn.\nYou may cast spells with converted mana cost less than or equal to the number of lands you control without paying their mana costs.","_id":"a12b16b0-f75f-42d8-9b24-947c1908e0f7","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","3"],"colors":["R"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199255,"image_small":"https://img.scryfall.com/cards/small/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","colorcategory":"r"},"c52d66db-5570-48a1-99cf-e0417517747b":{"color_identity":["R"],"set":"eld","collector_number":"124","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fervent Champion","name_lower":"fervent champion","full_name":"Fervent Champion [eld-124]","artist":"Steve Argyle","scryfall_uri":"https://scryfall.com/card/eld/124/fervent-champion?utm_source=api","rarity":"rare","oracle_text":"First strike, haste\nWhenever Fervent Champion attacks, another target attacking Knight you control gets +1/+0 until end of turn.\nEquip abilities you activate that target Fervent Champion cost {3} less to activate.","_id":"c52d66db-5570-48a1-99cf-e0417517747b","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r"],"colors":["R"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198973,"power":"1","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","colorcategory":"r"},"aaae15dd-11b6-4421-99e9-365c7fe4a5d6":{"color_identity":["R"],"set":"eld","collector_number":"120","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Embercleave","name_lower":"embercleave","full_name":"Embercleave [eld-120]","artist":"Joe Slucher","scryfall_uri":"https://scryfall.com/card/eld/120/embercleave?utm_source=api","rarity":"mythic","oracle_text":"Flash\nThis spell costs {1} less to cast for each attacking creature you control.\nWhen Embercleave enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+1 and has double strike and trample.\nEquip {3}","_id":"aaae15dd-11b6-4421-99e9-365c7fe4a5d6","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","r","4"],"colors":["R"],"type":"Legendary Artifact — Equipment","full_art":false,"language":"en","tcgplayer_id":198755,"image_small":"https://img.scryfall.com/cards/small/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","image_normal":"https://img.scryfall.com/cards/normal/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","colorcategory":"r"},"dbf16457-3444-4130-b220-834b69d9faa3":{"color_identity":["B"],"set":"eld","collector_number":"111","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Witch's Vengeance","name_lower":"witch's vengeance","full_name":"Witch's Vengeance [eld-111]","artist":"Titus Lunter","scryfall_uri":"https://scryfall.com/card/eld/111/witchs-vengeance?utm_source=api","rarity":"rare","oracle_text":"Creatures of the creature type of your choice get -3/-3 until end of turn.","_id":"dbf16457-3444-4130-b220-834b69d9faa3","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","1"],"colors":["B"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":198750,"image_small":"https://img.scryfall.com/cards/small/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","image_normal":"https://img.scryfall.com/cards/normal/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","colorcategory":"b"},"07c17b01-ee5d-491a-8403-b3f819b778c4":{"color_identity":["B"],"set":"eld","collector_number":"110","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Wishclaw Talisman","name_lower":"wishclaw talisman","full_name":"Wishclaw Talisman [eld-110]","artist":"Daarken","scryfall_uri":"https://scryfall.com/card/eld/110/wishclaw-talisman?utm_source=api","rarity":"rare","oracle_text":"Wishclaw Talisman enters the battlefield with three wish counters on it.\n{1}, {T}, Remove a wish counter from Wishclaw Talisman: Search your library for a card, put it into your hand, then shuffle your library. An opponent gains control of Wishclaw Talisman. Activate this ability only during your turn.","_id":"07c17b01-ee5d-491a-8403-b3f819b778c4","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","1"],"colors":["B"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198745,"image_small":"https://img.scryfall.com/cards/small/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","image_normal":"https://img.scryfall.com/cards/normal/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","colorcategory":"b"},"93c2c11d-dfc3-4ba9-8c0f-a98114090396":{"color_identity":["B"],"set":"eld","collector_number":"101","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Rankle, Master of Pranks","name_lower":"rankle, master of pranks","full_name":"Rankle, Master of Pranks [eld-101]","artist":"Dmitry Burmak","scryfall_uri":"https://scryfall.com/card/eld/101/rankle-master-of-pranks?utm_source=api","rarity":"mythic","oracle_text":"Flying, haste\nWhenever Rankle, Master of Pranks deals combat damage to a player, choose any number —\n• Each player discards a card.\n• Each player loses 1 life and draws a card.\n• Each player sacrifices a creature.","_id":"93c2c11d-dfc3-4ba9-8c0f-a98114090396","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","2"],"colors":["B"],"type":"Legendary Creature — Faerie Rogue","full_art":false,"language":"en","tcgplayer_id":198584,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","image_normal":"https://img.scryfall.com/cards/normal/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","colorcategory":"b"},"9173ffda-1d3b-4dab-8dcb-de44717de464":{"color_identity":["B"],"set":"eld","collector_number":"98","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Oathsworn Knight","name_lower":"oathsworn knight","full_name":"Oathsworn Knight [eld-98]","artist":"Svetlin Velinov","scryfall_uri":"https://scryfall.com/card/eld/98/oathsworn-knight?utm_source=api","rarity":"rare","oracle_text":"Oathsworn Knight enters the battlefield with four +1/+1 counters on it.\nOathsworn Knight attacks each combat if able.\nIf damage would be dealt to Oathsworn Knight while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from it.","_id":"9173ffda-1d3b-4dab-8dcb-de44717de464","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199020,"power":"0","toughness":"0","image_small":"https://img.scryfall.com/cards/small/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","image_normal":"https://img.scryfall.com/cards/normal/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","colorcategory":"b"},"85929131-4df6-415c-b592-aefb2943c477":{"color_identity":["B"],"set":"eld","collector_number":"84","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Clackbridge Troll","name_lower":"clackbridge troll","full_name":"Clackbridge Troll [eld-84]","artist":"Svetlin Velinov","scryfall_uri":"https://scryfall.com/card/eld/84/clackbridge-troll?utm_source=api","rarity":"rare","oracle_text":"Trample, haste\nWhen Clackbridge Troll enters the battlefield, target opponent creates three 0/1 white Goat creature tokens.\nAt the beginning of combat on your turn, any opponent may sacrifice a creature. If a player does, tap Clackbridge Troll, you gain 3 life, and you draw a card.","_id":"85929131-4df6-415c-b592-aefb2943c477","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","3"],"colors":["B"],"type":"Creature — Troll","full_art":false,"language":"en","tcgplayer_id":198782,"power":"8","toughness":"8","image_small":"https://img.scryfall.com/cards/small/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","image_normal":"https://img.scryfall.com/cards/normal/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","colorcategory":"b","tokens":[{"tokenId":"213be25c-88db-440b-83c3-973586a4f320","sourceCardId":"85929131-4df6-415c-b592-aefb2943c477"}]},"eb69473f-de99-43a7-b094-429465ae735c":{"color_identity":["B"],"set":"eld","collector_number":"82","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Cauldron of Eternity","name_lower":"the cauldron of eternity","full_name":"The Cauldron of Eternity [eld-82]","artist":"Tomasz Jedruszek","scryfall_uri":"https://scryfall.com/card/eld/82/the-cauldron-of-eternity?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {2} less to cast for each creature card in your graveyard.\nWhenever a creature you control dies, put it on the bottom of its owner's library.\n{2}{B}, {T}, Pay 2 life: Return target creature card from your graveyard to the battlefield. Activate this ability only any time you could cast a sorcery.","_id":"eb69473f-de99-43a7-b094-429465ae735c","cmc":12,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","10"],"colors":["B"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":199279,"image_small":"https://img.scryfall.com/cards/small/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","image_normal":"https://img.scryfall.com/cards/normal/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","colorcategory":"b"},"fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5":{"color_identity":["B"],"set":"eld","collector_number":"79","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Blacklance Paragon","name_lower":"blacklance paragon","full_name":"Blacklance Paragon [eld-79]","artist":"Victor Adame Minguez","scryfall_uri":"https://scryfall.com/card/eld/79/blacklance-paragon?utm_source=api","rarity":"rare","oracle_text":"Flash\nWhen Blacklance Paragon enters the battlefield, target Knight gains deathtouch and lifelink until end of turn.","_id":"fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199277,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","image_normal":"https://img.scryfall.com/cards/normal/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","colorcategory":"b"},"ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1":{"color_identity":["B"],"set":"eld","collector_number":"75","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Ayara, First of Locthwain","name_lower":"ayara, first of locthwain","full_name":"Ayara, First of Locthwain [eld-75]","artist":"Ryan Pancoast","scryfall_uri":"https://scryfall.com/card/eld/75/ayara-first-of-locthwain?utm_source=api","rarity":"rare","oracle_text":"Whenever Ayara, First of Locthwain or another black creature enters the battlefield under your control, each opponent loses 1 life and you gain 1 life.\n{T}, Sacrifice another black creature: Draw a card.","_id":"ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","b"],"colors":["B"],"type":"Legendary Creature — Elf Noble","full_art":false,"language":"en","tcgplayer_id":198909,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","image_normal":"https://img.scryfall.com/cards/normal/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","colorcategory":"b"},"daff1c8d-0f25-4bec-bd50-208ae2ac0aac":{"color_identity":["U"],"set":"eld","collector_number":"71","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Vantress Gargoyle","name_lower":"vantress gargoyle","full_name":"Vantress Gargoyle [eld-71]","artist":"Cristi Balanescu","scryfall_uri":"https://scryfall.com/card/eld/71/vantress-gargoyle?utm_source=api","rarity":"rare","oracle_text":"Flying\nVantress Gargoyle can't attack unless defending player has seven or more cards in their graveyard.\nVantress Gargoyle can't block unless you have four or more cards in hand.\n{T}: Each player puts the top card of their library into their graveyard.","_id":"daff1c8d-0f25-4bec-bd50-208ae2ac0aac","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","1"],"colors":["U"],"type":"Artifact Creature — Gargoyle","full_art":false,"language":"en","tcgplayer_id":199034,"power":"5","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","image_normal":"https://img.scryfall.com/cards/normal/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","colorcategory":"u"},"a98a7698-57fb-41f6-86d4-251c7d444c6a":{"color_identity":["U"],"set":"eld","collector_number":"66","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Stolen by the Fae","name_lower":"stolen by the fae","full_name":"Stolen by the Fae [eld-66]","artist":"Ryan Alexander Lee","scryfall_uri":"https://scryfall.com/card/eld/66/stolen-by-the-fae?utm_source=api","rarity":"rare","oracle_text":"Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying.","_id":"a98a7698-57fb-41f6-86d4-251c7d444c6a","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","u","x"],"colors":["U"],"type":"Sorcery","full_art":false,"language":"en","tcgplayer_id":198981,"image_small":"https://img.scryfall.com/cards/small/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","image_normal":"https://img.scryfall.com/cards/normal/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","colorcategory":"u","tokens":[{"tokenId":"bcd82cb0-ff4b-4f4d-b3d0-3ac53883b099","sourceCardId":"a98a7698-57fb-41f6-86d4-251c7d444c6a"}]},"a10c1407-d397-4caa-b7b7-e7d91ffd4ee9":{"color_identity":["U"],"set":"eld","collector_number":"55","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Mirrormade","name_lower":"mirrormade","full_name":"Mirrormade [eld-55]","artist":"Volkan Baǵa","scryfall_uri":"https://scryfall.com/card/eld/55/mirrormade?utm_source=api","rarity":"rare","oracle_text":"You may have Mirrormade enter the battlefield as a copy of any artifact or enchantment on the battlefield.","_id":"a10c1407-d397-4caa-b7b7-e7d91ffd4ee9","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","u","1"],"colors":["U"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199057,"image_small":"https://img.scryfall.com/cards/small/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","colorcategory":"u"},"0f7f1148-7b1b-4969-a2f8-428de1e2e8ff":{"color_identity":["U"],"set":"eld","collector_number":"54","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Midnight Clock","name_lower":"midnight clock","full_name":"Midnight Clock [eld-54]","artist":"Alexander Forssberg","scryfall_uri":"https://scryfall.com/card/eld/54/midnight-clock?utm_source=api","rarity":"rare","oracle_text":"{T}: Add {U}.\n{2}{U}: Put an hour counter on Midnight Clock.\nAt the beginning of each upkeep, put an hour counter on Midnight Clock.\nWhen the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock.","_id":"0f7f1148-7b1b-4969-a2f8-428de1e2e8ff","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","2"],"colors":["U"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198581,"image_small":"https://img.scryfall.com/cards/small/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","image_normal":"https://img.scryfall.com/cards/normal/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","colorcategory":"u"},"08b89af1-7b22-4153-b42d-a2ea4e0f320c":{"color_identity":["U"],"set":"eld","collector_number":"51","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Magic Mirror","name_lower":"the magic mirror","full_name":"The Magic Mirror [eld-51]","artist":"Anastasia Ovchinnikova","scryfall_uri":"https://scryfall.com/card/eld/51/the-magic-mirror?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {1} less to cast for each instant and sorcery card in your graveyard.\nYou have no maximum hand size.\nAt the beginning of your upkeep, put a knowledge counter on The Magic Mirror, then draw a card for each knowledge counter on The Magic Mirror.","_id":"08b89af1-7b22-4153-b42d-a2ea4e0f320c","cmc":9,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","u","u","6"],"colors":["U"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":199031,"image_small":"https://img.scryfall.com/cards/small/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","image_normal":"https://img.scryfall.com/cards/normal/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","colorcategory":"u"},"62ddce0d-f22a-4fcd-9a4a-d71938750ba1":{"color_identity":["U"],"set":"eld","collector_number":"48","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Gadwick, the Wizened","name_lower":"gadwick, the wizened","full_name":"Gadwick, the Wizened [eld-48]","artist":"Colin Boyer","scryfall_uri":"https://scryfall.com/card/eld/48/gadwick-the-wizened?utm_source=api","rarity":"rare","oracle_text":"When Gadwick, the Wizened enters the battlefield, draw X cards.\nWhenever you cast a blue spell, tap target nonland permanent an opponent controls.","_id":"62ddce0d-f22a-4fcd-9a4a-d71938750ba1","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","u","u","x"],"colors":["U"],"type":"Legendary Creature — Human Wizard","full_art":false,"language":"en","tcgplayer_id":198943,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","image_normal":"https://img.scryfall.com/cards/normal/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","colorcategory":"u"},"6afc67d1-1018-4a15-ab5f-377fd11dcd3d":{"color_identity":["U"],"set":"eld","collector_number":"46","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Folio of Fancies","name_lower":"folio of fancies","full_name":"Folio of Fancies [eld-46]","artist":"Colin Boyer","scryfall_uri":"https://scryfall.com/card/eld/46/folio-of-fancies?utm_source=api","rarity":"rare","oracle_text":"Players have no maximum hand size.\n{X}{X}, {T}: Each player draws X cards.\n{2}{U}, {T}: Each opponent puts a number of cards equal to the number of cards in their hand from the top of their library into their graveyard.","_id":"6afc67d1-1018-4a15-ab5f-377fd11dcd3d","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","1"],"colors":["U"],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":199019,"image_small":"https://img.scryfall.com/cards/small/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","colorcategory":"u"},"bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a":{"color_identity":["U"],"set":"eld","collector_number":"43","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Emry, Lurker of the Loch","name_lower":"emry, lurker of the loch","full_name":"Emry, Lurker of the Loch [eld-43]","artist":"Livia Prima","scryfall_uri":"https://scryfall.com/card/eld/43/emry-lurker-of-the-loch?utm_source=api","rarity":"rare","oracle_text":"This spell costs {1} less to cast for each artifact you control.\nWhen Emry, Lurker of the Loch enters the battlefield, put the top four cards of your library into your graveyard.\n{T}: Choose target artifact card in your graveyard. You may cast that card this turn. (You still pay its costs. Timing rules still apply.)","_id":"bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","2"],"colors":["U"],"type":"Legendary Creature — Merfolk Wizard","full_art":false,"language":"en","tcgplayer_id":198857,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","image_normal":"https://img.scryfall.com/cards/normal/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","art_crop":"https://img.scryfall.com/cards/art_crop/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","colorcategory":"u"},"4b2bde2d-e5df-407e-993c-85880dbb6045":{"color_identity":["W"],"set":"eld","collector_number":"36","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Worthy Knight","name_lower":"worthy knight","full_name":"Worthy Knight [eld-36]","artist":"Yongjae Choi","scryfall_uri":"https://scryfall.com/card/eld/36/worthy-knight?utm_source=api","rarity":"rare","oracle_text":"Whenever you cast a Knight spell, create a 1/1 white Human creature token.","_id":"4b2bde2d-e5df-407e-993c-85880dbb6045","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198811,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","image_normal":"https://img.scryfall.com/cards/normal/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","colorcategory":"w","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"4b2bde2d-e5df-407e-993c-85880dbb6045"}]},"fa3ab467-be97-4b84-a73d-b03484d06b97":{"color_identity":["W"],"set":"eld","collector_number":"20","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Linden, the Steadfast Queen","name_lower":"linden, the steadfast queen","full_name":"Linden, the Steadfast Queen [eld-20]","artist":"Ryan Pancoast","scryfall_uri":"https://scryfall.com/card/eld/20/linden-the-steadfast-queen?utm_source=api","rarity":"rare","oracle_text":"Vigilance\nWhenever a white creature you control attacks, you gain 1 life.","_id":"fa3ab467-be97-4b84-a73d-b03484d06b97","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","w","w"],"colors":["W"],"type":"Legendary Creature — Human Noble","full_art":false,"language":"en","tcgplayer_id":199209,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","image_normal":"https://img.scryfall.com/cards/normal/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","colorcategory":"w"},"663b3e6f-1099-4de8-a0a7-6f1919c38010":{"color_identity":["W"],"set":"eld","collector_number":"18","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Hushbringer","name_lower":"hushbringer","full_name":"Hushbringer [eld-18]","artist":"Bastien L. Deharme","scryfall_uri":"https://scryfall.com/card/eld/18/hushbringer?utm_source=api","rarity":"rare","oracle_text":"Flying, lifelink\nCreatures entering the battlefield or dying don't cause abilities to trigger.","_id":"663b3e6f-1099-4de8-a0a7-6f1919c38010","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":199465,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","image_normal":"https://img.scryfall.com/cards/normal/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","colorcategory":"w"},"c7093834-9627-4da2-9322-c03bfd5b3a71":{"color_identity":["W"],"set":"eld","collector_number":"17","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Harmonious Archon","name_lower":"harmonious archon","full_name":"Harmonious Archon [eld-17]","artist":"Anastasia Ovchinnikova","scryfall_uri":"https://scryfall.com/card/eld/17/harmonious-archon?utm_source=api","rarity":"mythic","oracle_text":"Flying\nNon-Archon creatures have base power and toughness 3/3.\nWhen Harmonious Archon enters the battlefield, create two 1/1 white Human creature tokens.","_id":"c7093834-9627-4da2-9322-c03bfd5b3a71","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","w","4"],"colors":["W"],"type":"Creature — Archon","full_art":false,"language":"en","tcgplayer_id":198854,"power":"4","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","colorcategory":"w","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"c7093834-9627-4da2-9322-c03bfd5b3a71"}]},"d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b":{"color_identity":["W"],"set":"eld","collector_number":"16","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Happily Ever After","name_lower":"happily ever after","full_name":"Happily Ever After [eld-16]","artist":"Matt Stewart","scryfall_uri":"https://scryfall.com/card/eld/16/happily-ever-after?utm_source=api","rarity":"rare","oracle_text":"When Happily Ever After enters the battlefield, each player gains 5 life and draws a card.\nAt the beginning of your upkeep, if there are five colors among permanents you control, there are six or more card types among permanents you control and/or cards in your graveyard, and your life total is greater than or equal to your starting life total, you win the game.","_id":"d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","2"],"colors":["W"],"type":"Enchantment","full_art":false,"language":"en","tcgplayer_id":199413,"image_small":"https://img.scryfall.com/cards/small/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","image_normal":"https://img.scryfall.com/cards/normal/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","colorcategory":"w"},"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f":{"color_identity":["W"],"set":"eld","collector_number":"9","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Circle of Loyalty","name_lower":"the circle of loyalty","full_name":"The Circle of Loyalty [eld-9]","artist":"Bastien L. Deharme","scryfall_uri":"https://scryfall.com/card/eld/9/the-circle-of-loyalty?utm_source=api","rarity":"mythic","oracle_text":"This spell costs {1} less to cast for each Knight you control.\nCreatures you control get +1/+1.\nWhenever you cast a legendary spell, create a 2/2 white Knight creature token with vigilance.\n{3}{W}, {T}: Create a 2/2 white Knight creature token with vigilance.","_id":"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","w","4"],"colors":["W"],"type":"Legendary Artifact","full_art":false,"language":"en","tcgplayer_id":198557,"image_small":"https://img.scryfall.com/cards/small/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","colorcategory":"w","tokens":[{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f"},{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"79093d00-362d-4d07-8a0a-cf5e1ccf9c0f"}]},"dcb94950-3f3e-4876-84f8-d5e4d9cfecee":{"color_identity":["W"],"set":"eld","collector_number":"8","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Charming Prince","name_lower":"charming prince","full_name":"Charming Prince [eld-8]","artist":"Randy Vargas","scryfall_uri":"https://scryfall.com/card/eld/8/charming-prince?utm_source=api","rarity":"rare","oracle_text":"When Charming Prince enters the battlefield, choose one —\n• Scry 2.\n• You gain 3 life.\n• Exile another target creature you own. Return it to the battlefield under your control at the beginning of the next end step.","_id":"dcb94950-3f3e-4876-84f8-d5e4d9cfecee","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","1"],"colors":["W"],"type":"Creature — Human Noble","full_art":false,"language":"en","tcgplayer_id":198860,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","image_normal":"https://img.scryfall.com/cards/normal/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","colorcategory":"w"},"fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e":{"color_identity":["W"],"set":"eld","collector_number":"1","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Acclaimed Contender","name_lower":"acclaimed contender","full_name":"Acclaimed Contender [eld-1]","artist":"David Gaillet","scryfall_uri":"https://scryfall.com/card/eld/1/acclaimed-contender?utm_source=api","rarity":"rare","oracle_text":"When Acclaimed Contender enters the battlefield, if you control another Knight, look at the top five cards of your library. You may reveal a Knight, Aura, Equipment, or legendary artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.","_id":"fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","2"],"colors":["W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":199292,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","image_normal":"https://img.scryfall.com/cards/normal/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","colorcategory":"w"},"8a665794-513f-4f78-92c9-1844ec27c79c":{"color_identity":["G","W"],"set":"eld","collector_number":"212","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Oakhame Ranger","name_lower":"oakhame ranger","full_name":"Oakhame Ranger [eld-212]","artist":"Mitchell Malloy & Maddie Julyk","scryfall_uri":"https://scryfall.com/card/eld/212/oakhame-ranger-bring-back?utm_source=api","rarity":"uncommon","oracle_text":"{T}: Creatures you control get +1/+1 until end of turn.\nCreate two 1/1 white Human creature tokens. (Then exile this card. You may cast the creature later from exile.)","_id":"8a665794-513f-4f78-92c9-1844ec27c79c","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g-w","g-w","g-w","g-w","split","g-w","g-w","g-w","g-w"],"colors":["G","W"],"type":"Creature — Elf Knight","full_art":false,"language":"en","tcgplayer_id":198889,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","image_normal":"https://img.scryfall.com/cards/normal/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","colorcategory":"m","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"8a665794-513f-4f78-92c9-1844ec27c79c"}]},"8bc518fc-904e-4e39-aeda-ffb222bfcc82":{"color_identity":["G"],"set":"eld","collector_number":"180","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Tuinvale Treefolk","name_lower":"tuinvale treefolk","full_name":"Tuinvale Treefolk [eld-180]","artist":"Jason A. Engle","scryfall_uri":"https://scryfall.com/card/eld/180/tuinvale-treefolk-oaken-boon?utm_source=api","rarity":"common","oracle_text":"\nPut two +1/+1 counters on target creature. (Then exile this card. You may cast the creature later from exile.)","_id":"8bc518fc-904e-4e39-aeda-ffb222bfcc82","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["g","3","split","g","5"],"colors":["G"],"type":"Creature — Treefolk Druid","full_art":false,"language":"en","tcgplayer_id":199212,"power":"6","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","colorcategory":"g"},"2a0d430f-da84-4752-940c-8457c525aac9":{"color_identity":["G"],"set":"eld","collector_number":"174","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Rosethorn Acolyte","name_lower":"rosethorn acolyte","full_name":"Rosethorn Acolyte [eld-174]","artist":"Johannes Voss","scryfall_uri":"https://scryfall.com/card/eld/174/rosethorn-acolyte-seasonal-ritual?utm_source=api","rarity":"common","oracle_text":"{T}: Add one mana of any color.\nAdd one mana of any color. (Then exile this card. You may cast the creature later from exile.)","_id":"2a0d430f-da84-4752-940c-8457c525aac9","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["g","split","g","2"],"colors":["G"],"type":"Creature — Elf Druid","full_art":false,"language":"en","tcgplayer_id":198551,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","image_normal":"https://img.scryfall.com/cards/normal/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","art_crop":"https://img.scryfall.com/cards/art_crop/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","colorcategory":"g"},"4ccdef9c-1e85-4358-8059-8972479f7556":{"color_identity":["G"],"set":"eld","collector_number":"165","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Lovestruck Beast","name_lower":"lovestruck beast","full_name":"Lovestruck Beast [eld-165]","artist":"Kev Walker","scryfall_uri":"https://scryfall.com/card/eld/165/lovestruck-beast-hearts-desire?utm_source=api","rarity":"rare","oracle_text":"Lovestruck Beast can't attack unless you control a 1/1 creature.\nCreate a 1/1 white Human creature token. (Then exile this card. You may cast the creature later from exile.)","_id":"4ccdef9c-1e85-4358-8059-8972479f7556","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","split","g","2"],"colors":["G"],"type":"Creature — Beast Noble","full_art":false,"language":"en","tcgplayer_id":198578,"power":"5","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","image_normal":"https://img.scryfall.com/cards/normal/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","colorcategory":"g","tokens":[{"tokenId":"94057dc6-e589-4a29-9bda-90f5bece96c4","sourceCardId":"4ccdef9c-1e85-4358-8059-8972479f7556"}]},"194b7a1c-291a-470e-9a40-61b72a46793b":{"color_identity":["G"],"set":"eld","collector_number":"156","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Garenbrig Carver","name_lower":"garenbrig carver","full_name":"Garenbrig Carver [eld-156]","artist":"Lucas Graciano","scryfall_uri":"https://scryfall.com/card/eld/156/garenbrig-carver-shields-might?utm_source=api","rarity":"common","oracle_text":"\nTarget creature gets +2/+2 until end of turn. (Then exile this card. You may cast the creature later from exile.)","_id":"194b7a1c-291a-470e-9a40-61b72a46793b","cmc":4,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["g","1","split","g","3"],"colors":["G"],"type":"Creature — Human Warrior","full_art":false,"language":"en","tcgplayer_id":199347,"power":"3","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","image_normal":"https://img.scryfall.com/cards/normal/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","art_crop":"https://img.scryfall.com/cards/art_crop/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","colorcategory":"g"},"06bd1ad2-fb5d-4aef-87d1-13a341c686fa":{"color_identity":["G"],"set":"eld","collector_number":"155","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Flaxen Intruder","name_lower":"flaxen intruder","full_name":"Flaxen Intruder [eld-155]","artist":"Gabor Szikszai","scryfall_uri":"https://scryfall.com/card/eld/155/flaxen-intruder-welcome-home?utm_source=api","rarity":"uncommon","oracle_text":"Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.\nCreate three 2/2 green Bear creature tokens. (Then exile this card. You may cast the creature later from exile.)","_id":"06bd1ad2-fb5d-4aef-87d1-13a341c686fa","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","g","5","split","g"],"colors":["G"],"type":"Creature — Human Berserker","full_art":false,"language":"en","tcgplayer_id":198574,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","image_normal":"https://img.scryfall.com/cards/normal/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","colorcategory":"g","tokens":[{"tokenId":"b0f09f9e-e0f9-4ed8-bfc0-5f1a3046106e","sourceCardId":"06bd1ad2-fb5d-4aef-87d1-13a341c686fa"}]},"7f78a570-d776-42f2-a609-6da0156c8de7":{"color_identity":["G"],"set":"eld","collector_number":"150","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Curious Pair","name_lower":"curious pair","full_name":"Curious Pair [eld-150]","artist":"Daarken","scryfall_uri":"https://scryfall.com/card/eld/150/curious-pair-treats-to-share?utm_source=api","rarity":"common","oracle_text":"\nCreate a Food token. (Then exile this card. You may cast the creature later from exile. A Food token is an artifact with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")","_id":"7f78a570-d776-42f2-a609-6da0156c8de7","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["g","split","g","1"],"colors":["G"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":198863,"power":"1","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","colorcategory":"g","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"7f78a570-d776-42f2-a609-6da0156c8de7"}]},"a66f5ea7-ddbb-4b89-b812-77bd17972cf9":{"color_identity":["G"],"set":"eld","collector_number":"149","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Beanstalk Giant","name_lower":"beanstalk giant","full_name":"Beanstalk Giant [eld-149]","artist":"Jason A. Engle","scryfall_uri":"https://scryfall.com/card/eld/149/beanstalk-giant-fertile-footsteps?utm_source=api","rarity":"uncommon","oracle_text":"Beanstalk Giant's power and toughness are each equal to the number of lands you control.\nSearch your library for a basic land card, put it onto the battlefield, then shuffle your library. (Then exile this card. You may cast the creature later from exile.)","_id":"a66f5ea7-ddbb-4b89-b812-77bd17972cf9","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","2","split","g","6"],"colors":["G"],"type":"Creature — Giant","full_art":false,"language":"en","tcgplayer_id":198419,"power":"*","toughness":"*","image_small":"https://img.scryfall.com/cards/small/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","image_normal":"https://img.scryfall.com/cards/normal/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","colorcategory":"g"},"a3d13d84-01e4-4429-93db-e5afff811527":{"color_identity":["R"],"set":"eld","collector_number":"137","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Rimrock Knight","name_lower":"rimrock knight","full_name":"Rimrock Knight [eld-137]","artist":"Chris Rallis","scryfall_uri":"https://scryfall.com/card/eld/137/rimrock-knight-boulder-rush?utm_source=api","rarity":"common","oracle_text":"Rimrock Knight can't block.\nTarget creature gets +2/+0 until end of turn. (Then exile this card. You may cast the creature later from exile.)","_id":"a3d13d84-01e4-4429-93db-e5afff811527","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["r","split","r","1"],"colors":["R"],"type":"Creature — Dwarf Knight","full_art":false,"language":"en","tcgplayer_id":199534,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","image_normal":"https://img.scryfall.com/cards/normal/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","colorcategory":"r"},"0b4399b6-e67f-40d8-8676-f5db7e04a6c9":{"color_identity":["R"],"set":"eld","collector_number":"131","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Merchant of the Vale","name_lower":"merchant of the vale","full_name":"Merchant of the Vale [eld-131]","artist":"David Gaillet","scryfall_uri":"https://scryfall.com/card/eld/131/merchant-of-the-vale-haggle?utm_source=api","rarity":"common","oracle_text":"{2}{R}, Discard a card: Draw a card.\nYou may discard a card. If you do, draw a card. (Then exile this card. You may cast the creature later from exile.)","_id":"0b4399b6-e67f-40d8-8676-f5db7e04a6c9","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["r","split","r","2"],"colors":["R"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":198998,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","image_normal":"https://img.scryfall.com/cards/normal/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","colorcategory":"r"},"6cc73d16-5ed7-4104-91f6-0997a2080e2e":{"color_identity":["R"],"set":"eld","collector_number":"122","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Embereth Shieldbreaker","name_lower":"embereth shieldbreaker","full_name":"Embereth Shieldbreaker [eld-122]","artist":"Randy Vargas","scryfall_uri":"https://scryfall.com/card/eld/122/embereth-shieldbreaker-battle-display?utm_source=api","rarity":"uncommon","oracle_text":"\nDestroy target artifact. (Then exile this card. You may cast the creature later from exile.)","_id":"6cc73d16-5ed7-4104-91f6-0997a2080e2e","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","split","r","1"],"colors":["R"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198550,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","image_normal":"https://img.scryfall.com/cards/normal/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","colorcategory":"r"},"09fd2d9c-1793-4beb-a3fb-7a869f660cd4":{"color_identity":["R"],"set":"eld","collector_number":"115","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Bonecrusher Giant","name_lower":"bonecrusher giant","full_name":"Bonecrusher Giant [eld-115]","artist":"Victor Adame Minguez","scryfall_uri":"https://scryfall.com/card/eld/115/bonecrusher-giant-stomp?utm_source=api","rarity":"rare","oracle_text":"Whenever Bonecrusher Giant becomes the target of a spell, Bonecrusher Giant deals 2 damage to that spell's controller.\nDamage can't be prevented this turn. Stomp deals 2 damage to any target.","_id":"09fd2d9c-1793-4beb-a3fb-7a869f660cd4","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","1","split","r","2"],"colors":["R"],"type":"Creature — Giant","full_art":false,"language":"en","tcgplayer_id":199035,"power":"4","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","colorcategory":"r"},"f82541f2-b17c-45b4-87ff-f9b46d23578c":{"color_identity":["B"],"set":"eld","collector_number":"105","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Smitten Swordmaster","name_lower":"smitten swordmaster","full_name":"Smitten Swordmaster [eld-105]","artist":"Taylor Ingvarsson","scryfall_uri":"https://scryfall.com/card/eld/105/smitten-swordmaster-curry-favor?utm_source=api","rarity":"common","oracle_text":"Lifelink\nYou gain X life and each opponent loses X life, where X is the number of Knights you control.","_id":"f82541f2-b17c-45b4-87ff-f9b46d23578c","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["b","split","b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198401,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","image_normal":"https://img.scryfall.com/cards/normal/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","art_crop":"https://img.scryfall.com/cards/art_crop/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","colorcategory":"b"},"4dc774b4-3f70-4351-b1b8-8a0193cb3a50":{"color_identity":["B"],"set":"eld","collector_number":"102","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Reaper of Night","name_lower":"reaper of night","full_name":"Reaper of Night [eld-102]","artist":"Jeff Simpson","scryfall_uri":"https://scryfall.com/card/eld/102/reaper-of-night-harvest-fear?utm_source=api","rarity":"common","oracle_text":"Whenever Reaper of Night attacks, if defending player has two or fewer cards in hand, it gains flying until end of turn.\nTarget opponent discards two cards. (Then exile this card. You may cast the creature later from exile.)","_id":"4dc774b4-3f70-4351-b1b8-8a0193cb3a50","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["b","3","split","b","b","5"],"colors":["B"],"type":"Creature — Specter","full_art":false,"language":"en","tcgplayer_id":199528,"power":"4","toughness":"5","image_small":"https://img.scryfall.com/cards/small/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","image_normal":"https://img.scryfall.com/cards/normal/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","art_crop":"https://img.scryfall.com/cards/art_crop/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","colorcategory":"b"},"330cc452-4382-401d-9432-ac27ae6e27ad":{"color_identity":["B"],"set":"eld","collector_number":"99","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Order of Midnight","name_lower":"order of midnight","full_name":"Order of Midnight [eld-99]","artist":"Victor Adame Minguez","scryfall_uri":"https://scryfall.com/card/eld/99/order-of-midnight-alter-fate?utm_source=api","rarity":"uncommon","oracle_text":"Flying\nOrder of Midnight can't block.\nReturn target creature card from your graveyard to your hand. (Then exile this card. You may cast the creature later from exile.)","_id":"330cc452-4382-401d-9432-ac27ae6e27ad","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","1","split","b","1"],"colors":["B"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198405,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","image_normal":"https://img.scryfall.com/cards/normal/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","colorcategory":"b"},"e73d8a84-2c0d-423c-89c7-71de0af9e1ac":{"color_identity":["B"],"set":"eld","collector_number":"97","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Murderous Rider","name_lower":"murderous rider","full_name":"Murderous Rider [eld-97]","artist":"Josh Hass","scryfall_uri":"https://scryfall.com/card/eld/97/murderous-rider-swift-end?utm_source=api","rarity":"rare","oracle_text":"Lifelink\nWhen Murderous Rider dies, put it on the bottom of its owner's library.\nDestroy target creature or planeswalker. You lose 2 life. (Then exile this card. You may cast the creature later from exile.)","_id":"e73d8a84-2c0d-423c-89c7-71de0af9e1ac","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","b","1","split","b","b","1"],"colors":["B"],"type":"Creature — Zombie Knight","full_art":false,"language":"en","tcgplayer_id":198749,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","colorcategory":"b"},"c5f6c745-e46a-42eb-8eca-b7b74ab1245e":{"color_identity":["B"],"set":"eld","collector_number":"90","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Foulmire Knight","name_lower":"foulmire knight","full_name":"Foulmire Knight [eld-90]","artist":"Alex Brock","scryfall_uri":"https://scryfall.com/card/eld/90/foulmire-knight-profane-insight?utm_source=api","rarity":"uncommon","oracle_text":"Deathtouch\nYou draw a card and you lose 1 life. (Then exile this card. You may cast the creature later from exile.)","_id":"c5f6c745-e46a-42eb-8eca-b7b74ab1245e","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["b","2","split","b"],"colors":["B"],"type":"Creature — Zombie Knight","full_art":false,"language":"en","tcgplayer_id":198404,"power":"1","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","colorcategory":"b"},"de2f964a-e4e1-4321-92ad-34b781868e11":{"color_identity":["U"],"set":"eld","collector_number":"61","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Queen of Ice","name_lower":"queen of ice","full_name":"Queen of Ice [eld-61]","artist":"Eric Deschamps","scryfall_uri":"https://scryfall.com/card/eld/61/queen-of-ice-rage-of-winter?utm_source=api","rarity":"common","oracle_text":"Whenever Queen of Ice deals combat damage to a creature, tap that creature. It doesn't untap during its controller's next untap step.\nTap target creature. It doesn't untap during its controller's next untap step. (Then exile this card. You may cast the creature later from exile.)","_id":"de2f964a-e4e1-4321-92ad-34b781868e11","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["u","1","split","u","2"],"colors":["U"],"type":"Creature — Human Noble Wizard","full_art":false,"language":"en","tcgplayer_id":199512,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","image_normal":"https://img.scryfall.com/cards/normal/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","art_crop":"https://img.scryfall.com/cards/art_crop/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","colorcategory":"u"},"ceb7308d-608c-4ede-9496-d795fc5bb271":{"color_identity":["U"],"set":"eld","collector_number":"53","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Merfolk Secretkeeper","name_lower":"merfolk secretkeeper","full_name":"Merfolk Secretkeeper [eld-53]","artist":"Jana Schirmer","scryfall_uri":"https://scryfall.com/card/eld/53/merfolk-secretkeeper-venture-deeper?utm_source=api","rarity":"common","oracle_text":"\nTarget player puts the top four cards of their library into their graveyard. (Then exile this card. You may cast the creature later from exile.)","_id":"ceb7308d-608c-4ede-9496-d795fc5bb271","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["u","split","u"],"colors":["U"],"type":"Creature — Merfolk Wizard","full_art":false,"language":"en","tcgplayer_id":199509,"power":"0","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","image_normal":"https://img.scryfall.com/cards/normal/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","colorcategory":"u"},"7acbd812-b994-4e68-8f95-04222796e994":{"color_identity":["U"],"set":"eld","collector_number":"49","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Hypnotic Sprite","name_lower":"hypnotic sprite","full_name":"Hypnotic Sprite [eld-49]","artist":"Irina Nordsol","scryfall_uri":"https://scryfall.com/card/eld/49/hypnotic-sprite-mesmeric-glare?utm_source=api","rarity":"uncommon","oracle_text":"Flying\nCounter target spell with converted mana cost 3 or less. (Then exile this card. You may cast the creature later from exile.)","_id":"7acbd812-b994-4e68-8f95-04222796e994","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","2","split","u","u"],"colors":["U"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":198792,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","image_normal":"https://img.scryfall.com/cards/normal/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","colorcategory":"u"},"e3435fd6-8f51-4d99-a278-4ddb088acfe1":{"color_identity":["U"],"set":"eld","collector_number":"44","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Fae of Wishes","name_lower":"fae of wishes","full_name":"Fae of Wishes [eld-44]","artist":"Magali Villeneuve","scryfall_uri":"https://scryfall.com/card/eld/44/fae-of-wishes-granted?utm_source=api","rarity":"rare","oracle_text":"Flying\n{1}{U}, Discard two cards: Return Fae of Wishes to its owner's hand.\nYou may choose a noncreature card you own from outside the game, reveal it, and put it into your hand.","_id":"e3435fd6-8f51-4d99-a278-4ddb088acfe1","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","3","split","u","1"],"colors":["U"],"type":"Creature — Faerie Wizard","full_art":false,"language":"en","tcgplayer_id":199346,"power":"1","toughness":"4","image_small":"https://img.scryfall.com/cards/small/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","colorcategory":"u"},"c2089ec9-0665-448f-bfe9-d181de127814":{"color_identity":["U"],"set":"eld","collector_number":"39","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Brazen Borrower","name_lower":"brazen borrower","full_name":"Brazen Borrower [eld-39]","artist":"Eric Deschamps","scryfall_uri":"https://scryfall.com/card/eld/39/brazen-borrower-petty-theft?utm_source=api","rarity":"mythic","oracle_text":"Flash\nFlying\nBrazen Borrower can block only creatures with flying.\nReturn target nonland permanent an opponent controls to its owner's hand.","_id":"c2089ec9-0665-448f-bfe9-d181de127814","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","1","split","u","u","1"],"colors":["U"],"type":"Creature — Faerie Rogue","full_art":false,"language":"en","tcgplayer_id":199387,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","image_normal":"https://img.scryfall.com/cards/normal/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","colorcategory":"u"},"32158458-42eb-41bc-a15a-11af28463eb0":{"color_identity":["U"],"set":"eld","collector_number":"38","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Animating Faerie","name_lower":"animating faerie","full_name":"Animating Faerie [eld-38]","artist":"Joseph Meehan","scryfall_uri":"https://scryfall.com/card/eld/38/animating-faerie-bring-to-life?utm_source=api","rarity":"uncommon","oracle_text":"Flying\nTarget noncreature artifact you control becomes a 0/0 artifact creature. Put four +1/+1 counters on it.","_id":"32158458-42eb-41bc-a15a-11af28463eb0","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","2","split","u","2"],"colors":["U"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":198549,"power":"2","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","image_normal":"https://img.scryfall.com/cards/normal/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","colorcategory":"u"},"7bd105f3-fa33-4490-aea9-b47ca121b664":{"color_identity":["W"],"set":"eld","collector_number":"31","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Silverflame Squire","name_lower":"silverflame squire","full_name":"Silverflame Squire [eld-31]","artist":"Lie Setiawan","scryfall_uri":"https://scryfall.com/card/eld/31/silverflame-squire-on-alert?utm_source=api","rarity":"common","oracle_text":"\nTarget creature gets +2/+2 until end of turn. Untap it. (Then exile this spell. You may cast the creature later from exile.)","_id":"7bd105f3-fa33-4490-aea9-b47ca121b664","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["w","2","split","w","1"],"colors":["W"],"type":"Creature — Human Soldier","full_art":false,"language":"en","tcgplayer_id":199211,"power":"2","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","image_normal":"https://img.scryfall.com/cards/normal/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","colorcategory":"w"},"c0b4f0ce-0d18-4546-803d-94a2f4f30951":{"color_identity":["W"],"set":"eld","collector_number":"28","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Shepherd of the Flock","name_lower":"shepherd of the flock","full_name":"Shepherd of the Flock [eld-28]","artist":"Drew Baker","scryfall_uri":"https://scryfall.com/card/eld/28/shepherd-of-the-flock-usher-to-safety?utm_source=api","rarity":"uncommon","oracle_text":"\nReturn target permanent you control to its owner's hand. (Then exile this card. You may cast the creature later from exile.)","_id":"c0b4f0ce-0d18-4546-803d-94a2f4f30951","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","split","w","1"],"colors":["W"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":199345,"power":"3","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","image_normal":"https://img.scryfall.com/cards/normal/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","colorcategory":"w"},"9e5c8cf1-1d7c-49e5-bfad-7e13c418118f":{"color_identity":["W"],"set":"eld","collector_number":"26","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Realm-Cloaked Giant","name_lower":"realm-cloaked giant","full_name":"Realm-Cloaked Giant [eld-26]","artist":"Adam Paquette","scryfall_uri":"https://scryfall.com/card/eld/26/realm-cloaked-giant-cast-off?utm_source=api","rarity":"mythic","oracle_text":"Vigilance\nDestroy all non-Giant creatures. (Then exile this card. You may cast the creature later from exile.)","_id":"9e5c8cf1-1d7c-49e5-bfad-7e13c418118f","cmc":7,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","w","3","split","w","w","5"],"colors":["W"],"type":"Creature — Giant","full_art":false,"language":"en","tcgplayer_id":199302,"power":"7","toughness":"7","image_small":"https://img.scryfall.com/cards/small/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","image_normal":"https://img.scryfall.com/cards/normal/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","colorcategory":"w"},"99083707-2152-42c0-b5c3-b4f97ec20190":{"color_identity":["W"],"set":"eld","collector_number":"21","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Lonesome Unicorn","name_lower":"lonesome unicorn","full_name":"Lonesome Unicorn [eld-21]","artist":"Winona Nelson","scryfall_uri":"https://scryfall.com/card/eld/21/lonesome-unicorn-rider-in-need?utm_source=api","rarity":"common","oracle_text":"Vigilance\nCreate a 2/2 white Knight creature token with vigilance. (Then exile this card. You may cast the creature later from exile.)","_id":"99083707-2152-42c0-b5c3-b4f97ec20190","cmc":5,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["w","2","split","w","4"],"colors":["W"],"type":"Creature — Unicorn","full_art":false,"language":"en","tcgplayer_id":199217,"power":"3","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","image_normal":"https://img.scryfall.com/cards/normal/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","art_crop":"https://img.scryfall.com/cards/art_crop/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","colorcategory":"w","tokens":[{"tokenId":"703e7ecf-3d73-40c1-8cfe-0758778817cf","sourceCardId":"99083707-2152-42c0-b5c3-b4f97ec20190"}]},"75754468-2850-42e6-ab22-61ff7b9d1214":{"color_identity":["W"],"set":"eld","collector_number":"14","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Giant Killer","name_lower":"giant killer","full_name":"Giant Killer [eld-14]","artist":"Jesper Ejsing","scryfall_uri":"https://scryfall.com/card/eld/14/giant-killer-chop-down?utm_source=api","rarity":"rare","oracle_text":"{1}{W}, {T}: Tap target creature.\nDestroy target creature with power 4 or greater. (Then exile this card. You may cast the creature later from exile.)","_id":"75754468-2850-42e6-ab22-61ff7b9d1214","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["w","2","split","w"],"colors":["W"],"type":"Creature — Human Peasant","full_art":false,"language":"en","tcgplayer_id":198743,"power":"1","toughness":"2","image_small":"https://img.scryfall.com/cards/small/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","image_normal":"https://img.scryfall.com/cards/normal/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","art_crop":"https://img.scryfall.com/cards/art_crop/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","colorcategory":"w"},"e8bbece8-9620-44d9-b991-350fe952538a":{"color_identity":["W"],"set":"eld","collector_number":"11","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Faerie Guidemother","name_lower":"faerie guidemother","full_name":"Faerie Guidemother [eld-11]","artist":"Mila Pesic","scryfall_uri":"https://scryfall.com/card/eld/11/faerie-guidemother-gift-of-the-fae?utm_source=api","rarity":"common","oracle_text":"Flying\nTarget creature gets +2/+1 and gains flying until end of turn. (Then exile this card. You may cast the creature later from exile.)","_id":"e8bbece8-9620-44d9-b991-350fe952538a","cmc":1,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["w","1","split","w"],"colors":["W"],"type":"Creature — Faerie","full_art":false,"language":"en","tcgplayer_id":198707,"power":"1","toughness":"1","image_small":"https://img.scryfall.com/cards/small/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","image_normal":"https://img.scryfall.com/cards/normal/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","colorcategory":"w"},"c7d5e394-8e41-442e-ae97-a478a61e1b9d":{"color_identity":["W"],"set":"eld","collector_number":"5","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Ardenvale Tactician","name_lower":"ardenvale tactician","full_name":"Ardenvale Tactician [eld-5]","artist":"Jason Rainville","scryfall_uri":"https://scryfall.com/card/eld/5/ardenvale-tactician-dizzying-swoop?utm_source=api","rarity":"common","oracle_text":"Flying\nTap up to two target creatures. (Then exile this card. You may cast the creature later from exile.)","_id":"c7d5e394-8e41-442e-ae97-a478a61e1b9d","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["w","1","split","w","w","1"],"colors":["W"],"type":"Creature — Human Knight","full_art":false,"language":"en","tcgplayer_id":198997,"power":"2","toughness":"3","image_small":"https://img.scryfall.com/cards/small/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","art_crop":"https://img.scryfall.com/cards/art_crop/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","colorcategory":"w"},"6a7111f3-01a6-4311-bc08-036a1fba60f5":{"color_identity":["R","U"],"set":"eld","collector_number":"199","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"The Royal Scions","name_lower":"the royal scions","full_name":"The Royal Scions [eld-199]","artist":"Paul Scott Canavan","scryfall_uri":"https://scryfall.com/card/eld/199/the-royal-scions?utm_source=api","rarity":"mythic","oracle_text":"+1: Draw a card, then discard a card.\n+1: Target creature gets +2/+0 and gains first strike and trample until end of turn.\n−8: Draw four cards. When you do, The Royal Scions deals damage to any target equal to the number of cards in your hand.","_id":"6a7111f3-01a6-4311-bc08-036a1fba60f5","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["r","u","1"],"colors":["R","U"],"type":"Legendary Planeswalker — Will Rowan","full_art":false,"language":"en","tcgplayer_id":198882,"loyalty":"5","image_small":"https://img.scryfall.com/cards/small/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","art_crop":"https://img.scryfall.com/cards/art_crop/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","colorcategory":"m"},"3462a3d0-5552-49fa-9eb7-100960c55891":{"color_identity":["G","U"],"set":"eld","collector_number":"197","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Oko, Thief of Crowns","name_lower":"oko, thief of crowns","full_name":"Oko, Thief of Crowns [eld-197]","artist":"Yongjae Choi","scryfall_uri":"https://scryfall.com/card/eld/197/oko-thief-of-crowns?utm_source=api","rarity":"mythic","oracle_text":"+2: Create a Food token. (It's an artifact with \"{2}, {T}, Sacrifice this artifact: You gain 3 life.\")\n+1: Target artifact or creature loses all abilities and becomes a green Elk creature with base power and toughness 3/3.\n−5: Exchange control of target artifact or creature you control and target creature an opponent controls with power 3 or less.","_id":"3462a3d0-5552-49fa-9eb7-100960c55891","cmc":3,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["u","g","1"],"colors":["G","U"],"type":"Legendary Planeswalker — Oko","full_art":false,"language":"en","tcgplayer_id":198356,"loyalty":"4","image_small":"https://img.scryfall.com/cards/small/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452","image_normal":"https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452","art_crop":"https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452","colorcategory":"m","tokens":[{"tokenId":"bf36408d-ed85-497f-8e68-d3a922c388a0","sourceCardId":"3462a3d0-5552-49fa-9eb7-100960c55891"}]},"abef512f-8f1d-4257-b16f-c0eed58670ec":{"color_identity":["B","G"],"set":"eld","collector_number":"191","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Garruk, Cursed Huntsman","name_lower":"garruk, cursed huntsman","full_name":"Garruk, Cursed Huntsman [eld-191]","artist":"Eric Deschamps","scryfall_uri":"https://scryfall.com/card/eld/191/garruk-cursed-huntsman?utm_source=api","rarity":"mythic","oracle_text":"0: Create two 2/2 black and green Wolf creature tokens with \"When this creature dies, put a loyalty counter on each Garruk you control.\"\n−3: Destroy target creature. Draw a card.\n−6: You get an emblem with \"Creatures you control get +3/+3 and have trample.\"","_id":"abef512f-8f1d-4257-b16f-c0eed58670ec","cmc":6,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["g","b","4"],"colors":["B","G"],"type":"Legendary Planeswalker — Garruk","full_art":false,"language":"en","tcgplayer_id":198500,"loyalty":"5","image_small":"https://img.scryfall.com/cards/small/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","image_normal":"https://img.scryfall.com/cards/normal/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","art_crop":"https://img.scryfall.com/cards/art_crop/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","colorcategory":"m","tokens":[{"tokenId":"d6c65749-1774-4b36-891e-abf762c95cec","sourceCardId":"abef512f-8f1d-4257-b16f-c0eed58670ec"}]},"ec1f1041-f667-4b73-b1f2-e5bcae84095e":{"color_identity":[],"set":"eld","collector_number":"333","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Command Tower","name_lower":"command tower","full_name":"Command Tower [eld-333]","artist":"Evan Shipard","scryfall_uri":"https://scryfall.com/card/eld/333/command-tower?utm_source=api","rarity":"common","oracle_text":"{T}: Add one mana of any color in your commander's color identity.","_id":"ec1f1041-f667-4b73-b1f2-e5bcae84095e","cmc":0,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":[""],"colors":[],"type":"Land","full_art":false,"language":"en","tcgplayer_id":198815,"image_small":"https://img.scryfall.com/cards/small/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","image_normal":"https://img.scryfall.com/cards/normal/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","art_crop":"https://img.scryfall.com/cards/art_crop/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","colorcategory":"l"},"040301e8-20c1-4f4c-8766-d05f11415efd":{"color_identity":[],"set":"eld","collector_number":"332","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Tome of Legends","name_lower":"tome of legends","full_name":"Tome of Legends [eld-332]","artist":"Mila Pesic","scryfall_uri":"https://scryfall.com/card/eld/332/tome-of-legends?utm_source=api","rarity":"rare","oracle_text":"Tome of Legends enters the battlefield with a page counter on it.\nWhenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends.\n{1}, {T}, Remove a page counter from Tome of Legends: Draw a card.","_id":"040301e8-20c1-4f4c-8766-d05f11415efd","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":false},"parsed_cost":["2"],"colors":[],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":198443,"image_small":"https://img.scryfall.com/cards/small/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","image_normal":"https://img.scryfall.com/cards/normal/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","art_crop":"https://img.scryfall.com/cards/art_crop/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","colorcategory":"c"},"84128e98-87d6-4c2f-909b-9435a7833e63":{"color_identity":[],"set":"eld","collector_number":"331","promo":false,"digital":false,"isToken":false,"border_color":"black","name":"Arcane Signet","name_lower":"arcane signet","full_name":"Arcane Signet [eld-331]","artist":"Dan Scott","scryfall_uri":"https://scryfall.com/card/eld/331/arcane-signet?utm_source=api","rarity":"common","oracle_text":"{T}: Add one mana of any color in your commander's color identity.","_id":"84128e98-87d6-4c2f-909b-9435a7833e63","cmc":2,"legalities":{"Legacy":true,"Modern":true,"Standard":true,"Pioneer":true,"Pauper":true},"parsed_cost":["2"],"colors":[],"type":"Artifact","full_art":false,"language":"en","tcgplayer_id":194913,"image_small":"https://img.scryfall.com/cards/small/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","image_normal":"https://img.scryfall.com/cards/normal/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","art_crop":"https://img.scryfall.com/cards/art_crop/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","colorcategory":"c"}} \ No newline at end of file diff --git a/fixtures/cardimages.json b/fixtures/cardimages.json index e9334e74a..58375193c 100644 --- a/fixtures/cardimages.json +++ b/fixtures/cardimages.json @@ -1 +1 @@ -{"inspiring veteran":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775"},"improbable alliance":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770"},"kenrith's transformation":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600"},"slaying fire":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469"},"glass casket":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690"},"piper of the swarm":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584"},"fabled passage":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204"},"castle vantress":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190"},"castle locthwain":{"image_normal":"https://img.scryfall.com/cards/normal/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183"},"castle garenbrig":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176"},"castle embereth":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168"},"castle ardenvale":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161"},"stonecoil serpent":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124"},"sorcerous spyglass":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099"},"stormfist crusader":{"image_normal":"https://img.scryfall.com/cards/normal/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842"},"outlaws' merriment":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798"},"lochmere serpent":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781"},"faeburrow elder":{"image_normal":"https://img.scryfall.com/cards/normal/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752"},"escape to the wilds":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745"},"doom foretold":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732"},"dance of the manse":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726"},"yorvo, lord of garenbrig":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720"},"wildborn preserver":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704"},"wicked wolf":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698"},"return of the wildspeaker":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646"},"questing beast":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640"},"once upon a time":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195"},"the great henge":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580"},"gilded goose":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572"},"feasting troll king":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524"},"torbran, thane of red fell":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491"},"sundering stroke":{"image_normal":"https://img.scryfall.com/cards/normal/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475"},"robber of the rich":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437"},"opportunistic dragon":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407"},"irencrag pyromancer":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380"},"irencrag feat":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374"},"fires of invention":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362"},"fervent champion":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356"},"embercleave":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333"},"witch's vengeance":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276"},"wishclaw talisman":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271"},"rankle, master of pranks":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217"},"oathsworn knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195"},"clackbridge troll":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116"},"the cauldron of eternity":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105"},"blacklance paragon":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086"},"ayara, first of locthwain":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057"},"vantress gargoyle":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034"},"stolen by the fae":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003"},"mirrormade":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939"},"midnight clock":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934"},"the magic mirror":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916"},"gadwick, the wizened":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894"},"folio of fancies":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881"},"emry, lurker of the loch":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844"},"worthy knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821"},"linden, the steadfast queen":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720"},"hushbringer":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709"},"harmonious archon":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703"},"happily ever after":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697"},"the circle of loyalty":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653"},"charming prince":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646"},"acclaimed contender":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601"},"oakhame ranger":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907"},"tuinvale treefolk":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693"},"rosethorn acolyte":{"image_normal":"https://img.scryfall.com/cards/normal/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659"},"lovestruck beast":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606"},"garenbrig carver":{"image_normal":"https://img.scryfall.com/cards/normal/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548"},"flaxen intruder":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543"},"curious pair":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513"},"beanstalk giant":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506"},"rimrock knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430"},"merchant of the vale":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397"},"embereth shieldbreaker":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345"},"bonecrusher giant":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299"},"smitten swordmaster":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242"},"reaper of night":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223"},"order of midnight":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205"},"murderous rider":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190"},"foulmire knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151"},"queen of ice":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973"},"merfolk secretkeeper":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928"},"hypnotic sprite":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901"},"fae of wishes":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870"},"brazen borrower":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838"},"animating faerie":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832"},"silverflame squire":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785"},"shepherd of the flock":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768"},"realm-cloaked giant":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756"},"lonesome unicorn":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726"},"giant killer":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685"},"faerie guidemother":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666"},"ardenvale tactician":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629"},"the royal scions":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808"},"oko, thief of crowns":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631"},"garruk, cursed huntsman":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758"},"command tower":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858"},"tome of legends":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851"},"arcane signet":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845"}} \ No newline at end of file +{"inspiring veteran":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775"},"improbable alliance":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770"},"kenrith's transformation":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600"},"slaying fire":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469"},"glass casket":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690"},"piper of the swarm":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584"},"fabled passage":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204"},"castle vantress":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190"},"castle locthwain":{"image_normal":"https://img.scryfall.com/cards/normal/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183"},"castle garenbrig":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176"},"castle embereth":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168"},"castle ardenvale":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161"},"stonecoil serpent":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124"},"sorcerous spyglass":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099"},"stormfist crusader":{"image_normal":"https://img.scryfall.com/cards/normal/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842"},"outlaws' merriment":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798"},"lochmere serpent":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781"},"faeburrow elder":{"image_normal":"https://img.scryfall.com/cards/normal/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752"},"escape to the wilds":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745"},"doom foretold":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732"},"dance of the manse":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726"},"yorvo, lord of garenbrig":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720"},"wildborn preserver":{"image_normal":"https://img.scryfall.com/cards/normal/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704"},"wicked wolf":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698"},"return of the wildspeaker":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646"},"questing beast":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640"},"once upon a time":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628"},"the great henge":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580"},"gilded goose":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572"},"feasting troll king":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524"},"torbran, thane of red fell":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491"},"sundering stroke":{"image_normal":"https://img.scryfall.com/cards/normal/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475"},"robber of the rich":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437"},"opportunistic dragon":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407"},"irencrag pyromancer":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380"},"irencrag feat":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374"},"fires of invention":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362"},"fervent champion":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356"},"embercleave":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333"},"witch's vengeance":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276"},"wishclaw talisman":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271"},"rankle, master of pranks":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217"},"oathsworn knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195"},"clackbridge troll":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116"},"the cauldron of eternity":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105"},"blacklance paragon":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086"},"ayara, first of locthwain":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057"},"vantress gargoyle":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034"},"stolen by the fae":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003"},"mirrormade":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939"},"midnight clock":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934"},"the magic mirror":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916"},"gadwick, the wizened":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894"},"folio of fancies":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881"},"emry, lurker of the loch":{"image_normal":"https://img.scryfall.com/cards/normal/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844"},"worthy knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821"},"linden, the steadfast queen":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720"},"hushbringer":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709"},"harmonious archon":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703"},"happily ever after":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697"},"the circle of loyalty":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653"},"charming prince":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646"},"acclaimed contender":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601"},"oakhame ranger":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907"},"tuinvale treefolk":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693"},"rosethorn acolyte":{"image_normal":"https://img.scryfall.com/cards/normal/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659"},"lovestruck beast":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606"},"garenbrig carver":{"image_normal":"https://img.scryfall.com/cards/normal/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548"},"flaxen intruder":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543"},"curious pair":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513"},"beanstalk giant":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506"},"rimrock knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430"},"merchant of the vale":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397"},"embereth shieldbreaker":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345"},"bonecrusher giant":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299"},"smitten swordmaster":{"image_normal":"https://img.scryfall.com/cards/normal/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242"},"reaper of night":{"image_normal":"https://img.scryfall.com/cards/normal/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223"},"order of midnight":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205"},"murderous rider":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190"},"foulmire knight":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151"},"queen of ice":{"image_normal":"https://img.scryfall.com/cards/normal/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973"},"merfolk secretkeeper":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928"},"hypnotic sprite":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901"},"fae of wishes":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870"},"brazen borrower":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838"},"animating faerie":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832"},"silverflame squire":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785"},"shepherd of the flock":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768"},"realm-cloaked giant":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756"},"lonesome unicorn":{"image_normal":"https://img.scryfall.com/cards/normal/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726"},"giant killer":{"image_normal":"https://img.scryfall.com/cards/normal/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685"},"faerie guidemother":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666"},"ardenvale tactician":{"image_normal":"https://img.scryfall.com/cards/normal/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629"},"the royal scions":{"image_normal":"https://img.scryfall.com/cards/normal/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808"},"oko, thief of crowns":{"image_normal":"https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452"},"garruk, cursed huntsman":{"image_normal":"https://img.scryfall.com/cards/normal/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758"},"command tower":{"image_normal":"https://img.scryfall.com/cards/normal/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858"},"tome of legends":{"image_normal":"https://img.scryfall.com/cards/normal/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851"},"arcane signet":{"image_normal":"https://img.scryfall.com/cards/normal/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845"}} \ No newline at end of file diff --git a/fixtures/cards_small.json b/fixtures/cards_small.json index c45b2940d..18d759a13 100644 --- a/fixtures/cards_small.json +++ b/fixtures/cards_small.json @@ -89,7 +89,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5873, + "edhrec_rank": 5374, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/MTG_Arena/status/1169291126970314752", @@ -208,7 +208,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9835, + "edhrec_rank": 8769, "preview": { "source": "Huey Jensen", "source_uri": "https://twitter.com/HueyJensen/status/1174420655242010624", @@ -306,7 +306,7 @@ "textless": false, "booster": true, "story_spotlight": true, - "edhrec_rank": 5212, + "edhrec_rank": 4041, "related_uris": { "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=473126", "tcgplayer_decks": "https://decks.tcgplayer.com/magic/deck/search?contains=Kenrith%27s+Transformation&page=1&partner=Scryfall&utm_campaign=affiliate&utm_medium=scryfall&utm_source=scryfall", @@ -400,7 +400,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 13492, + "edhrec_rank": 12958, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/feature/throne-eldraine-mechanics-2019-09-04", @@ -499,7 +499,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 13327, + "edhrec_rank": 12300, "preview": { "source": "Mark Rosewater", "source_uri": "https://mobile.twitter.com/maro254/status/1172198040263741441", @@ -618,7 +618,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6425, + "edhrec_rank": 5645, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/wizards_magic/status/1169279011639443457", @@ -713,7 +713,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 1511, + "edhrec_rank": 1057, "preview": { "source": "Face to Face Games", "source_uri": "http://magic.facetofacegames.com/exclusive-throne-of-eldraine-spoiler-fabled-passage/", @@ -810,7 +810,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3301, + "edhrec_rank": 2405, "preview": { "source": "Amanda Yeo", "source_uri": "https://twitter.com/amandamyeo/status/1173867462036611072", @@ -907,7 +907,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3233, + "edhrec_rank": 2427, "preview": { "source": "Stopgame", "source_uri": "https://youtu.be/ymiqozyqUuE", @@ -1004,7 +1004,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3759, + "edhrec_rank": 2836, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/colors-costs-tempo-building-better-castle-2019-09-17", @@ -1101,7 +1101,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5186, + "edhrec_rank": 4249, "preview": { "source": "Hareruya", "source_uri": "https://article.hareruyamtg.com/article/31458/?lang=en", @@ -1216,7 +1216,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 4658, + "edhrec_rank": 3708, "preview": { "source": "ESPN Brazil", "source_uri": "https://es.pn/2LDfNEd", @@ -1313,7 +1313,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5572, + "edhrec_rank": 4654, "preview": { "source": "Anoa", "source_uri": "http://mtg.anoad.com/?p=7533", @@ -1407,7 +1407,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 4952, + "edhrec_rank": 4872, "preview": { "source": "Geektenango", "source_uri": "https://www.facebook.com/geektenango/videos/2277811855673952", @@ -1510,7 +1510,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6799, + "edhrec_rank": 5891, "preview": { "source": "Bigweb", "source_uri": "https://mtg.bigweb.co.jp/article/preview/ELD", @@ -1644,7 +1644,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9001, + "edhrec_rank": 7825, "preview": { "source": "Gaby Spartz", "source_uri": "https://www.youtube.com/watch?v=OCPU11hC2Dc", @@ -1746,7 +1746,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11415, + "edhrec_rank": 10610, "preview": { "source": "Tasca Do Magique", "source_uri": "https://www.youtube.com/watch?v=rGagRu_HW2w", @@ -1849,7 +1849,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3190, + "edhrec_rank": 2273, "preview": { "source": "cafe.daum.net", "source_uri": "http://cafe.daum.net/magin/9Uu6/4718", @@ -1950,7 +1950,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8444, + "edhrec_rank": 7377, "preview": { "source": "Brainstorm Brewery", "source_uri": "https://www.youtube.com/watch?v=S44bJNc42GM", @@ -2069,7 +2069,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9768, + "edhrec_rank": 9096, "preview": { "source": "Destructoid", "source_uri": "https://www.destructoid.com/check-out-magic-the-gathering-s-doom-foretold-our-exclusive-throne-of-eldraine-card-reveal-565657.phtml", @@ -2169,7 +2169,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5141, + "edhrec_rank": 4311, "preview": { "source": "Commanderin", "source_uri": "https://www.youtube.com/watch?v=oQaCw2LbsCg", @@ -2272,7 +2272,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8358, + "edhrec_rank": 7470, "preview": { "source": "IGN España", "source_uri": "https://es.ign.com/magic-the-gathering/155533/news/magic-una-carta-una-carta-del-nuevo-set-el-trono-de-eldraine-en-exclusiva", @@ -2372,7 +2372,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8898, + "edhrec_rank": 7673, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/wildborn-preserver-2019-09-10", @@ -2472,7 +2472,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 12370, + "edhrec_rank": 11141, "preview": { "source": "NOT A WOLF", "source_uri": "https://twitter.com/SICKOFWOLVES/status/1171097721458946049", @@ -2571,7 +2571,7 @@ "textless": false, "booster": true, "story_spotlight": true, - "edhrec_rank": 3370, + "edhrec_rank": 2264, "preview": { "source": "The Vorthos Cast", "source_uri": "https://twitter.com/TheVorthosCast/status/1174687113389989888", @@ -2674,7 +2674,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7704, + "edhrec_rank": 6700, "preview": { "source": "Day9TV", "source_uri": "https://twitter.com/day9tv/status/1171090892201086976?s=21", @@ -2705,12 +2705,12 @@ "layout": "normal", "highres_image": true, "image_uris": { - "small": "https://img.scryfall.com/cards/small/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", - "normal": "https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", - "large": "https://img.scryfall.com/cards/large/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", - "png": "https://img.scryfall.com/cards/png/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.png?1575309195", - "art_crop": "https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", - "border_crop": "https://img.scryfall.com/cards/border_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195" + "small": "https://img.scryfall.com/cards/small/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", + "normal": "https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", + "large": "https://img.scryfall.com/cards/large/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", + "png": "https://img.scryfall.com/cards/png/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.png?1576022628", + "art_crop": "https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", + "border_crop": "https://img.scryfall.com/cards/border_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628" }, "mana_cost": "{1}{G}", "cmc": 2, @@ -2725,7 +2725,7 @@ "legalities": { "standard": "banned", "future": "legal", - "historic": "legal", + "historic": "banned", "pioneer": "banned", "modern": "legal", "legacy": "legal", @@ -2772,7 +2772,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8102, + "edhrec_rank": 7047, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/making-magic/eldraine-or-shine-2019-09-09", @@ -2873,7 +2873,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 2657, + "edhrec_rank": 1829, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/building-great-henge-2019-09-18", @@ -2991,7 +2991,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7172, + "edhrec_rank": 6169, "preview": { "source": "Kotaku", "source_uri": "https://www.kotaku.com.au/2019/09/magic-the-gathering-throne-of-eldraine-exclusive-reveal-gilded-goose-golden-egg/", @@ -3109,7 +3109,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 10655, + "edhrec_rank": 9789, "preview": { "source": "Kanister", "source_uri": "https://www.twitch.tv/videos/479450583", @@ -3213,7 +3213,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3484, + "edhrec_rank": 2801, "preview": { "source": "ZiggyD Gaming", "source_uri": "https://twitter.com/ZiggyDStarcraft/status/1173553765070209024", @@ -3311,7 +3311,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 10587, + "edhrec_rank": 9766, "preview": { "source": "John Rolf", "source_uri": "https://twitter.com/JRolfMTG/status/1172624112335958024?s=19", @@ -3411,7 +3411,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9928, + "edhrec_rank": 9143, "preview": { "source": "J-E Depraz", "source_uri": "https://twitter.com/JEDepraz/status/1171392737356197893", @@ -3511,7 +3511,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11280, + "edhrec_rank": 9911, "preview": { "source": "Sjow", "source_uri": "https://twitter.com/LiquidSjow/status/1171861699420413953", @@ -3612,7 +3612,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9473, + "edhrec_rank": 8475, "preview": { "source": "CoolStuffInc", "source_uri": "https://www.coolstuffinc.com/a/aliaintrazi-09182019-watch-it-burn-preview-for-throne-of-eldraine", @@ -3711,7 +3711,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9413, + "edhrec_rank": 8589, "preview": { "source": "Matthew Nass", "source_uri": "https://twitter.com/MatthewLNass/status/1172527368600076289", @@ -3810,7 +3810,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7933, + "edhrec_rank": 7015, "preview": { "source": "Vandal", "source_uri": "https://vandal.elespanol.com/noticia/1350726991/os-desvelamos-una-carta-exclusiva-para-la-nueva-ampliacion-de-magic-the-gathering/", @@ -3911,7 +3911,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6915, + "edhrec_rank": 6393, "preview": { "source": "Javier Domínguez", "source_uri": "https://twitter.com/JavierDmagic/status/1171904308041977862", @@ -4012,7 +4012,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 4560, + "edhrec_rank": 3948, "preview": { "source": "Martin Jůza", "source_uri": "https://twitter.com/MartinJuza/status/1171095982068686848", @@ -4111,7 +4111,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 12433, + "edhrec_rank": 11142, "preview": { "source": "The Masters of Modern", "source_uri": "https://twitter.com/theMMcast/status/1171115818630828033", @@ -4209,7 +4209,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 4784, + "edhrec_rank": 3840, "preview": { "source": "Brian Kibler", "source_uri": "https://twitter.com/bmkibler/status/1171093966801866754", @@ -4312,7 +4312,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5552, + "edhrec_rank": 4778, "preview": { "source": "TCGplayer", "source_uri": "https://twitter.com/MTGatTCGplayer/status/1169119200381689856", @@ -4412,7 +4412,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 10439, + "edhrec_rank": 10024, "preview": { "source": "Wizards of the Coast", "source_uri": "https://www.twitch.tv/videos/480556742", @@ -4530,7 +4530,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7443, + "edhrec_rank": 6564, "preview": { "source": "Noxious", "source_uri": "https://www.youtube.com/watch?v=VYL28w0hmwg", @@ -4631,7 +4631,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7112, + "edhrec_rank": 6316, "preview": { "source": "Brian Braun-Duin", "source_uri": "https://twitter.com/BraunDuinIt/status/1173693988697542657", @@ -4732,7 +4732,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8255, + "edhrec_rank": 7649, "preview": { "source": "Malditos Nerds", "source_uri": "https://twitter.com/MalditosNerdsVX/status/1173676142269816833", @@ -4836,7 +4836,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3676, + "edhrec_rank": 2914, "preview": { "source": "Good Luck High Five", "source_uri": "https://youtu.be/qhWhI57on0Q", @@ -4936,7 +4936,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 10842, + "edhrec_rank": 9947, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/adventuring-standard-and-limited-2019-09-13", @@ -5053,7 +5053,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8242, + "edhrec_rank": 7136, "preview": { "source": "Giga", "source_uri": "https://www.giga.de/artikel/magic-the-gathering-exklusive-preview-karte-zu-throne-of-eldraine/", @@ -5152,7 +5152,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3250, + "edhrec_rank": 2470, "preview": { "source": "MTGGoldfish", "source_uri": "https://www.mtggoldfish.com/articles/mirrormade-exclusive-throne-of-eldraine-preview", @@ -5250,7 +5250,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5940, + "edhrec_rank": 4856, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/wizards_magic/status/1169142807564640257/photo/1", @@ -5351,7 +5351,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 4612, + "edhrec_rank": 3851, "preview": { "source": "Brad Nelson", "source_uri": "https://twitter.com/fffreakmtg/status/1172525989802283009", @@ -5455,7 +5455,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6294, + "edhrec_rank": 5146, "preview": { "source": "The Command Zone", "source_uri": "https://www.youtube.com/watch?v=RYzy2drIllM&feature=youtu.be", @@ -5553,7 +5553,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5780, + "edhrec_rank": 4618, "preview": { "source": "PCGamesN", "source_uri": "https://www.pcgamesn.com/magic-the-gathering-arena/throne-of-eldraine-folio-of-fancies", @@ -5656,7 +5656,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3882, + "edhrec_rank": 3164, "preview": { "source": "NGA", "source_uri": "https://bbs.nga.cn/read.php?&tid=18485267&rand=293", @@ -5775,7 +5775,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7256, + "edhrec_rank": 6820, "preview": { "source": "GameSpot", "source_uri": "https://www.gamespot.com/articles/new-magic-the-gathering-throne-of-eldraine-cards-p/1100-6469732/", @@ -5879,7 +5879,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9902, + "edhrec_rank": 8784, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/making-magic/singing-eldraine-2019-09-16", @@ -5980,7 +5980,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5723, + "edhrec_rank": 4730, "preview": { "source": "LadyLavinias", "source_uri": "https://twitter.com/LadyLavinias/status/1174775658695864322", @@ -6099,7 +6099,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9834, + "edhrec_rank": 9033, "preview": { "source": "Jess Estephan", "source_uri": "https://twitter.com/jesstephan/status/1171786180666544130?s=20", @@ -6197,7 +6197,7 @@ "textless": false, "booster": true, "story_spotlight": true, - "edhrec_rank": 7982, + "edhrec_rank": 7402, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/happily-ever-after-2019-09-19", @@ -6316,7 +6316,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5981, + "edhrec_rank": 5533, "preview": { "source": "ChannelFireball", "source_uri": "https://www.facebook.com/channelfireball/videos/366428504287148/", @@ -6416,7 +6416,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6935, + "edhrec_rank": 5857, "preview": { "source": "Reid Duke", "source_uri": "https://www.twitch.tv/videos/479548512", @@ -6516,7 +6516,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6237, + "edhrec_rank": 5735, "preview": { "source": "Rei Sato", "source_uri": "https://www.twitch.tv/videos/482593745", @@ -6659,7 +6659,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 12828, + "edhrec_rank": 12029, "preview": { "source": "Formação Fireball", "source_uri": "https://www.youtube.com/watch?v=rPJLKVyOnIE", @@ -6783,7 +6783,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 12844, + "edhrec_rank": 12423, "preview": { "source": "Nizzahon Magic", "source_uri": "https://www.youtube.com/watch?v=v7HGSn0P1J4", @@ -6907,7 +6907,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9458, + "edhrec_rank": 8542, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/MTG_Arena/status/1169291126970314752", @@ -7049,7 +7049,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11778, + "edhrec_rank": 10793, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/MTG_Arena/status/1169022264182038531", @@ -7173,7 +7173,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 14920, + "edhrec_rank": 14559, "preview": { "source": "Eric Froehlich", "source_uri": "https://twitter.com/efropoker/status/1174052806459707393?s=21", @@ -7315,7 +7315,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9964, + "edhrec_rank": 9412, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/wizards_magic/status/1168992065994334208", @@ -7457,7 +7457,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 13250, + "edhrec_rank": 12599, "preview": { "source": "CNEWS", "source_uri": "https://www.cnews.fr/vie-numerique/2019-09-10/magic-gathering-revisite-les-contes-de-fees-avec-le-trone-deldraine-876392", @@ -7579,7 +7579,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5361, + "edhrec_rank": 4378, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/feature/throne-eldraine-mechanics-2019-09-04", @@ -7701,7 +7701,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11593, + "edhrec_rank": 10892, "related_uris": { "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=473099", "tcgplayer_decks": "https://decks.tcgplayer.com/magic/deck/search?contains=Rimrock+Knight&page=1&partner=Scryfall&utm_campaign=affiliate&utm_medium=scryfall&utm_source=scryfall", @@ -7820,7 +7820,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9390, + "edhrec_rank": 8392, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/adventure-adventure-2019-09-12", @@ -7944,7 +7944,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6768, + "edhrec_rank": 6280, "preview": { "source": "ChannelFireball", "source_uri": "https://www.youtube.com/watch?v=lKBtbDYICcU&t=2m21s", @@ -8068,7 +8068,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9467, + "edhrec_rank": 8609, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/adventuring-standard-and-limited-2019-09-13", @@ -8192,7 +8192,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6282, + "edhrec_rank": 5802, "preview": { "source": "IGN", "source_uri": "https://uk.ign.com/articles/2019/09/04/magic-the-gathering-throne-of-eldraine-4-new-cards-revealed-ser-konrad-the-grim-order-of-midnight-smitten-swordmaster-foulmire-knight", @@ -8314,7 +8314,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 13664, + "edhrec_rank": 13013, "related_uris": { "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=473064", "tcgplayer_decks": "https://decks.tcgplayer.com/magic/deck/search?contains=Reaper+of+Night&page=1&partner=Scryfall&utm_campaign=affiliate&utm_medium=scryfall&utm_source=scryfall", @@ -8431,7 +8431,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5968, + "edhrec_rank": 5390, "preview": { "source": "IGN", "source_uri": "https://uk.ign.com/articles/2019/09/04/magic-the-gathering-throne-of-eldraine-4-new-cards-revealed-ser-konrad-the-grim-order-of-midnight-smitten-swordmaster-foulmire-knight", @@ -8553,7 +8553,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 3670, + "edhrec_rank": 3019, "preview": { "source": "StarCityGames", "source_uri": "https://twitter.com/StarCityGames/status/1171077240102313988", @@ -8675,7 +8675,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6780, + "edhrec_rank": 6168, "preview": { "source": "IGN", "source_uri": "https://uk.ign.com/articles/2019/09/04/magic-the-gathering-throne-of-eldraine-4-new-cards-revealed-ser-konrad-the-grim-order-of-midnight-smitten-swordmaster-foulmire-knight", @@ -8797,7 +8797,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11921, + "edhrec_rank": 11559, "related_uris": { "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=473023", "tcgplayer_decks": "https://decks.tcgplayer.com/magic/deck/search?contains=Queen+of+Ice&page=1&partner=Scryfall&utm_campaign=affiliate&utm_medium=scryfall&utm_source=scryfall", @@ -8916,7 +8916,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11022, + "edhrec_rank": 9962, "related_uris": { "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=473015", "tcgplayer_decks": "https://decks.tcgplayer.com/magic/deck/search?contains=Merfolk+Secretkeeper&page=1&partner=Scryfall&utm_campaign=affiliate&utm_medium=scryfall&utm_source=scryfall", @@ -9033,7 +9033,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8651, + "edhrec_rank": 7807, "preview": { "source": "StarCityGames", "source_uri": "http://www.starcitygames.com/articles/39065_How-To-Approach-Hypnotic-Sprite-In-Throne-Of-Eldraine-Standard.html", @@ -9155,7 +9155,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11449, + "edhrec_rank": 10480, "preview": { "source": "Wizards of the Coast", "source_uri": "", @@ -9277,7 +9277,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8960, + "edhrec_rank": 7912, "preview": { "source": "/r/MagicArena", "source_uri": "https://www.reddit.com/r/MagicArena/comments/d60peu/eld_brazen_borrower_official_rmagicarena_spoiler/", @@ -9401,7 +9401,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9423, + "edhrec_rank": 8788, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/MTG_Arena/status/1169291126970314752", @@ -9525,7 +9525,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 13491, + "edhrec_rank": 13405, "preview": { "source": "Nizzahon Magic", "source_uri": "https://www.youtube.com/watch?v=v7HGSn0P1J4", @@ -9649,7 +9649,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 11285, + "edhrec_rank": 10350, "preview": { "source": "Eric Froehlich", "source_uri": "https://twitter.com/efropoker/status/1174065513636474880", @@ -9771,7 +9771,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 8952, + "edhrec_rank": 7757, "preview": { "source": "Tolarian Community College", "source_uri": "https://www.youtube.com/watch?v=d4Zm4JzNiVs", @@ -9911,7 +9911,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 13469, + "edhrec_rank": 12939, "preview": { "source": "Nizzahon Magic", "source_uri": "https://www.youtube.com/watch?v=v7HGSn0P1J4", @@ -10035,7 +10035,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9359, + "edhrec_rank": 8652, "preview": { "source": "Amaz", "source_uri": "https://twitter.com/Amaz/status/1171122126486757381", @@ -10159,7 +10159,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 10965, + "edhrec_rank": 10018, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/making-magic/eldraine-or-shine-2019-09-09", @@ -10283,7 +10283,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 9850, + "edhrec_rank": 9511, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/adventure-adventure-2019-09-12", @@ -10384,7 +10384,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 7715, + "edhrec_rank": 6902, "preview": { "source": "RiotPixels", "source_uri": "http://riotpixels.com/magicheskij-vestnik-vypusk-s-eksklyuzivami/", @@ -10415,12 +10415,12 @@ "layout": "normal", "highres_image": true, "image_uris": { - "small": "https://img.scryfall.com/cards/small/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", - "normal": "https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", - "large": "https://img.scryfall.com/cards/large/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", - "png": "https://img.scryfall.com/cards/png/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.png?1574073631", - "art_crop": "https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", - "border_crop": "https://img.scryfall.com/cards/border_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631" + "small": "https://img.scryfall.com/cards/small/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", + "normal": "https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", + "large": "https://img.scryfall.com/cards/large/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", + "png": "https://img.scryfall.com/cards/png/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.png?1576516452", + "art_crop": "https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", + "border_crop": "https://img.scryfall.com/cards/border_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452" }, "mana_cost": "{1}{G}{U}", "cmc": 3, @@ -10456,8 +10456,8 @@ "legalities": { "standard": "banned", "future": "legal", - "historic": "legal", - "pioneer": "legal", + "historic": "banned", + "pioneer": "banned", "modern": "legal", "legacy": "legal", "pauper": "not_legal", @@ -10503,7 +10503,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 5856, + "edhrec_rank": 4603, "preview": { "source": "Card Kingdom", "source_uri": "https://twitter.com/Card_Kingdom/status/1168967403805511680", @@ -10630,7 +10630,7 @@ "textless": false, "booster": true, "story_spotlight": false, - "edhrec_rank": 6076, + "edhrec_rank": 5089, "preview": { "source": "Wizards of the Coast", "source_uri": "https://twitter.com/MTG_Arena/status/1169264113412972544", @@ -10817,7 +10817,7 @@ "textless": false, "booster": false, "story_spotlight": false, - "edhrec_rank": 6713, + "edhrec_rank": 5746, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/inside-throne-eldraine-brawl-decks-2019-09-04", @@ -10911,7 +10911,7 @@ "textless": false, "booster": false, "story_spotlight": false, - "edhrec_rank": 379, + "edhrec_rank": 224, "preview": { "source": "Wizards of the Coast", "source_uri": "https://magic.wizards.com/en/articles/archive/card-preview/new-era-brawl-2019-07-22", diff --git a/fixtures/cards_small_converted.json b/fixtures/cards_small_converted.json index 76f43fc4a..58f15c888 100644 --- a/fixtures/cards_small_converted.json +++ b/fixtures/cards_small_converted.json @@ -23,6 +23,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -68,6 +69,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -116,6 +118,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -157,6 +160,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -198,6 +202,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -239,6 +244,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -286,6 +292,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -324,6 +331,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -362,6 +370,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -400,6 +409,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -438,6 +448,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -476,6 +487,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -518,6 +530,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -556,6 +569,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -595,6 +609,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -640,6 +655,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -699,6 +715,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -745,6 +762,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -791,6 +809,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -835,6 +854,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -885,6 +905,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -928,6 +949,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -972,6 +994,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1015,6 +1038,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1059,6 +1083,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1100,6 +1125,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1144,6 +1170,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1157,9 +1184,9 @@ "full_art": false, "language": "en", "tcgplayer_id": 198710, - "image_small": "https://img.scryfall.com/cards/small/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", - "image_normal": "https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", - "art_crop": "https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195", + "image_small": "https://img.scryfall.com/cards/small/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", + "image_normal": "https://img.scryfall.com/cards/normal/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", + "art_crop": "https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628", "colorcategory": "g" }, { @@ -1185,6 +1212,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1227,6 +1255,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1279,6 +1308,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1331,6 +1361,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1376,6 +1407,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1417,6 +1449,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1460,6 +1493,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1504,6 +1538,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1547,6 +1582,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1590,6 +1626,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1631,6 +1668,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1673,6 +1711,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1715,6 +1754,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1757,6 +1797,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1798,6 +1839,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1842,6 +1884,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1886,6 +1929,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1936,6 +1980,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -1978,6 +2023,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2021,6 +2067,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2065,6 +2112,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2108,6 +2156,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2156,6 +2205,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2198,6 +2248,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2239,6 +2290,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2282,6 +2334,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2327,6 +2380,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2368,6 +2422,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2411,6 +2466,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2460,6 +2516,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2504,6 +2561,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2547,6 +2605,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2597,6 +2656,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2638,6 +2698,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2690,6 +2751,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2733,6 +2795,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2777,6 +2840,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2834,6 +2898,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -2880,6 +2945,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -2925,6 +2991,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -2976,6 +3043,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3022,6 +3090,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3074,6 +3143,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3125,6 +3195,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3171,6 +3242,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3216,6 +3288,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3261,6 +3334,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3306,6 +3380,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3352,6 +3427,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3397,6 +3473,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3444,6 +3521,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3490,6 +3568,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3538,6 +3617,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3583,6 +3663,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3629,6 +3710,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3673,6 +3755,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3719,6 +3802,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3765,6 +3849,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3812,6 +3897,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3858,6 +3944,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -3904,6 +3991,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3949,6 +4037,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -3997,6 +4086,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -4049,6 +4139,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -4094,6 +4185,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -4139,6 +4231,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -4187,6 +4280,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -4232,6 +4326,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -4248,9 +4343,9 @@ "language": "en", "tcgplayer_id": 198356, "loyalty": "4", - "image_small": "https://img.scryfall.com/cards/small/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", - "image_normal": "https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", - "art_crop": "https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631", + "image_small": "https://img.scryfall.com/cards/small/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", + "image_normal": "https://img.scryfall.com/cards/normal/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", + "art_crop": "https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452", "colorcategory": "m", "tokens": [ { @@ -4283,6 +4378,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -4331,6 +4427,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ @@ -4367,6 +4464,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": false }, "parsed_cost": [ @@ -4403,6 +4501,7 @@ "Legacy": true, "Modern": true, "Standard": true, + "Pioneer": true, "Pauper": true }, "parsed_cost": [ diff --git a/fixtures/examplecube.js b/fixtures/examplecube.js index 8d17e191f..6677a6b7d 100644 --- a/fixtures/examplecube.js +++ b/fixtures/examplecube.js @@ -623,7 +623,7 @@ const examplePack = { 'Whenever Ayara, First of Locthwain or another black creature enters the battlefield under your control, each opponent loses 1 life and you gain 1 life.\n{T}, Sacrifice another black creature: Draw a card.', _id: 'ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1', cmc: 3, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['b', 'b', 'b'], colors: ['B'], type: 'Legendary Creature — Elf Noble', @@ -656,7 +656,7 @@ const examplePack = { 'Deathtouch\nYou draw a card and you lose 1 life. (Then exile this card. You may cast the creature later from exile.)', _id: 'c5f6c745-e46a-42eb-8eca-b7b74ab1245e', cmc: 1, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['b', '2', 'split', 'b'], colors: ['B'], type: 'Creature — Zombie Knight', @@ -689,7 +689,7 @@ const examplePack = { 'Flash\nThis spell costs {1} less to cast for each attacking creature you control.\nWhen Embercleave enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+1 and has double strike and trample.\nEquip {3}', _id: 'aaae15dd-11b6-4421-99e9-365c7fe4a5d6', cmc: 6, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['r', 'r', '4'], colors: ['R'], type: 'Legendary Artifact — Equipment', @@ -719,7 +719,7 @@ const examplePack = { oracle_text: '\nDestroy target artifact. (Then exile this card. You may cast the creature later from exile.)', _id: '6cc73d16-5ed7-4104-91f6-0997a2080e2e', cmc: 2, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['r', 'split', 'r', '1'], colors: ['R'], type: 'Creature — Human Knight', @@ -752,7 +752,7 @@ const examplePack = { 'Whenever Flaxen Intruder deals combat damage to a player, you may sacrifice it. When you do, destroy target artifact or enchantment.\nCreate three 2/2 green Bear creature tokens. (Then exile this card. You may cast the creature later from exile.)', _id: '06bd1ad2-fb5d-4aef-87d1-13a341c686fa', cmc: 1, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['g', 'g', '5', 'split', 'g'], colors: ['G'], type: 'Creature — Human Berserker', @@ -788,7 +788,7 @@ const examplePack = { 'When Gadwick, the Wizened enters the battlefield, draw X cards.\nWhenever you cast a blue spell, tap target nonland permanent an opponent controls.', _id: '62ddce0d-f22a-4fcd-9a4a-d71938750ba1', cmc: 3, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['u', 'u', 'u', 'x'], colors: ['U'], type: 'Legendary Creature — Human Wizard', @@ -821,7 +821,7 @@ const examplePack = { "Beanstalk Giant's power and toughness are each equal to the number of lands you control.\nSearch your library for a basic land card, put it onto the battlefield, then shuffle your library. (Then exile this card. You may cast the creature later from exile.)", _id: 'a66f5ea7-ddbb-4b89-b812-77bd17972cf9', cmc: 7, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['g', '2', 'split', 'g', '6'], colors: ['G'], type: 'Creature — Giant', @@ -854,7 +854,7 @@ const examplePack = { 'When Glass Casket enters the battlefield, exile target creature an opponent controls with converted mana cost 3 or less until Glass Casket leaves the battlefield.', _id: '562f1c51-d245-4771-bf61-415297e4f9d5', cmc: 2, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['w', '1'], colors: ['W'], type: 'Artifact', @@ -885,7 +885,7 @@ const examplePack = { "Flash\nFlying\nBrazen Borrower can block only creatures with flying.\nReturn target nonland permanent an opponent controls to its owner's hand.", _id: 'c2089ec9-0665-448f-bfe9-d181de127814', cmc: 3, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['u', '1', 'split', 'u', 'u', '1'], colors: ['U'], type: 'Creature — Faerie Rogue', @@ -918,7 +918,7 @@ const examplePack = { 'When Charming Prince enters the battlefield, choose one —\n• Scry 2.\n• You gain 3 life.\n• Exile another target creature you own. Return it to the battlefield under your control at the beginning of the next end step.', _id: 'dcb94950-3f3e-4876-84f8-d5e4d9cfecee', cmc: 2, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['w', '1'], colors: ['W'], type: 'Creature — Human Noble', @@ -950,7 +950,7 @@ const examplePack = { oracle_text: "{T}: Add one mana of any color in your commander's color identity.", _id: 'ec1f1041-f667-4b73-b1f2-e5bcae84095e', cmc: 0, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: true }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: true, Pioneer: true }, parsed_cost: [''], colors: [], type: 'Land', @@ -981,7 +981,7 @@ const examplePack = { 'Castle Vantress enters the battlefield tapped unless you control an Island.\n{T}: Add {U}.\n{2}{U}{U}, {T}: Scry 2.', _id: '0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b', cmc: 0, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: [''], colors: [], type: 'Land', @@ -1011,7 +1011,7 @@ const examplePack = { oracle_text: 'Other Knights you control get +1/+1.', _id: '0c3f372d-259d-4a31-9491-2d369b3f3f8b', cmc: 2, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['w', 'r'], colors: ['R', 'W'], type: 'Creature — Human Knight', @@ -1044,7 +1044,7 @@ const examplePack = { 'Whenever you draw your second card each turn, create a 1/1 blue Faerie creature token with flying.\n{4}{U}{R}: Draw a card, then discard a card.', _id: '0461867b-ec35-4d37-a398-5247e06c4afe', cmc: 2, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['r', 'u'], colors: ['R', 'U'], type: 'Enchantment', @@ -1077,7 +1077,7 @@ const examplePack = { oracle_text: 'Whenever you draw your second card each turn, Irencrag Pyromancer deals 3 damage to any target.', _id: '9a7b0ead-5629-429d-bede-8154f3fae96d', cmc: 3, - legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false }, + legalities: { Legacy: true, Modern: true, Standard: true, Pauper: false, Pioneer: true }, parsed_cost: ['r', '2'], colors: ['R'], type: 'Creature — Human Wizard', diff --git a/fixtures/imagedict.json b/fixtures/imagedict.json index ab4ca15a5..fc6e31bcb 100644 --- a/fixtures/imagedict.json +++ b/fixtures/imagedict.json @@ -1 +1 @@ -{"inspiring veteran [eld-194]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","artist":"Scott Murphy"},"improbable alliance [eld-193]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","artist":"Zoltan Boros"},"kenrith's transformation [eld-164]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","artist":"Kimonas Theodossiou"},"slaying fire [eld-143]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","artist":"Heonhwa Choe"},"glass casket [eld-15]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","artist":"Anastasia Ovchinnikova"},"piper of the swarm [eld-100]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","artist":"Irina Nordsol"},"fabled passage [eld-244]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","artist":"Howard Lyon"},"castle vantress [eld-242]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","artist":"John Avon"},"castle locthwain [eld-241]":{"uri":"https://img.scryfall.com/cards/art_crop/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","artist":"Titus Lunter"},"castle garenbrig [eld-240]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","artist":"Adam Paquette"},"castle embereth [eld-239]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","artist":"Jaime Jones"},"castle ardenvale [eld-238]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","artist":"Volkan Baǵa"},"stonecoil serpent [eld-235]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","artist":"Mark Poole"},"sorcerous spyglass [eld-233]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","artist":"Aaron Miller"},"stormfist crusader [eld-203]":{"uri":"https://img.scryfall.com/cards/art_crop/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","artist":"Chris Rallis"},"outlaws' merriment [eld-198]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","artist":"Suzanne Helmigh"},"lochmere serpent [eld-195]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","artist":"Sam Burley"},"faeburrow elder [eld-190]":{"uri":"https://img.scryfall.com/cards/art_crop/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","artist":"Raoul Vitale"},"escape to the wilds [eld-189]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","artist":"Chris Ostrowski"},"doom foretold [eld-187]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","artist":"Daniel Ljunggren"},"dance of the manse [eld-186]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","artist":"Yeong-Hao Han"},"yorvo, lord of garenbrig [eld-185]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","artist":"Zack Stella"},"wildborn preserver [eld-182]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","artist":"Lius Lasahido"},"wicked wolf [eld-181]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","artist":"Tomasz Jedruszek"},"return of the wildspeaker [eld-172]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","artist":"Chris Rallis"},"questing beast [eld-171]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","artist":"Igor Kieryluk"},"once upon a time [eld-169]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1575309195","artist":"Matt Stewart"},"the great henge [eld-161]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","artist":"Adam Paquette"},"gilded goose [eld-160]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","artist":"Lindsey Look"},"feasting troll king [eld-152]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","artist":"Nicholas Gregory"},"torbran, thane of red fell [eld-147]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","artist":"Grzegorz Rutkowski"},"sundering stroke [eld-144]":{"uri":"https://img.scryfall.com/cards/art_crop/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","artist":"Stanton Feng"},"robber of the rich [eld-138]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","artist":"Paul Scott Canavan"},"opportunistic dragon [eld-133]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","artist":"Chris Rahn"},"irencrag pyromancer [eld-128]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","artist":"Jason Rainville"},"irencrag feat [eld-127]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","artist":"Yongjae Choi"},"fires of invention [eld-125]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","artist":"Stanton Feng"},"fervent champion [eld-124]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","artist":"Steve Argyle"},"embercleave [eld-120]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","artist":"Joe Slucher"},"witch's vengeance [eld-111]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","artist":"Titus Lunter"},"wishclaw talisman [eld-110]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","artist":"Daarken"},"rankle, master of pranks [eld-101]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","artist":"Dmitry Burmak"},"oathsworn knight [eld-98]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","artist":"Svetlin Velinov"},"clackbridge troll [eld-84]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","artist":"Svetlin Velinov"},"the cauldron of eternity [eld-82]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","artist":"Tomasz Jedruszek"},"blacklance paragon [eld-79]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","artist":"Victor Adame Minguez"},"ayara, first of locthwain [eld-75]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","artist":"Ryan Pancoast"},"vantress gargoyle [eld-71]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","artist":"Cristi Balanescu"},"stolen by the fae [eld-66]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","artist":"Ryan Alexander Lee"},"mirrormade [eld-55]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","artist":"Volkan Baǵa"},"midnight clock [eld-54]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","artist":"Alexander Forssberg"},"the magic mirror [eld-51]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","artist":"Anastasia Ovchinnikova"},"gadwick, the wizened [eld-48]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","artist":"Colin Boyer"},"folio of fancies [eld-46]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","artist":"Colin Boyer"},"emry, lurker of the loch [eld-43]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","artist":"Livia Prima"},"worthy knight [eld-36]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","artist":"Yongjae Choi"},"linden, the steadfast queen [eld-20]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","artist":"Ryan Pancoast"},"hushbringer [eld-18]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","artist":"Bastien L. Deharme"},"harmonious archon [eld-17]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","artist":"Anastasia Ovchinnikova"},"happily ever after [eld-16]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","artist":"Matt Stewart"},"the circle of loyalty [eld-9]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","artist":"Bastien L. Deharme"},"charming prince [eld-8]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","artist":"Randy Vargas"},"acclaimed contender [eld-1]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","artist":"David Gaillet"},"oakhame ranger [eld-212]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","artist":"Mitchell Malloy & Maddie Julyk"},"tuinvale treefolk [eld-180]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","artist":"Jason A. Engle"},"rosethorn acolyte [eld-174]":{"uri":"https://img.scryfall.com/cards/art_crop/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","artist":"Johannes Voss"},"lovestruck beast [eld-165]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","artist":"Kev Walker"},"garenbrig carver [eld-156]":{"uri":"https://img.scryfall.com/cards/art_crop/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","artist":"Lucas Graciano"},"flaxen intruder [eld-155]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","artist":"Gabor Szikszai"},"curious pair [eld-150]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","artist":"Daarken"},"beanstalk giant [eld-149]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","artist":"Jason A. Engle"},"rimrock knight [eld-137]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","artist":"Chris Rallis"},"merchant of the vale [eld-131]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","artist":"David Gaillet"},"embereth shieldbreaker [eld-122]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","artist":"Randy Vargas"},"bonecrusher giant [eld-115]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","artist":"Victor Adame Minguez"},"smitten swordmaster [eld-105]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","artist":"Taylor Ingvarsson"},"reaper of night [eld-102]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","artist":"Jeff Simpson"},"order of midnight [eld-99]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","artist":"Victor Adame Minguez"},"murderous rider [eld-97]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","artist":"Josh Hass"},"foulmire knight [eld-90]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","artist":"Alex Brock"},"queen of ice [eld-61]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","artist":"Eric Deschamps"},"merfolk secretkeeper [eld-53]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","artist":"Jana Schirmer"},"hypnotic sprite [eld-49]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","artist":"Irina Nordsol"},"fae of wishes [eld-44]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","artist":"Magali Villeneuve"},"brazen borrower [eld-39]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","artist":"Eric Deschamps"},"animating faerie [eld-38]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","artist":"Joseph Meehan"},"silverflame squire [eld-31]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","artist":"Lie Setiawan"},"shepherd of the flock [eld-28]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","artist":"Drew Baker"},"realm-cloaked giant [eld-26]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","artist":"Adam Paquette"},"lonesome unicorn [eld-21]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","artist":"Winona Nelson"},"giant killer [eld-14]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","artist":"Jesper Ejsing"},"faerie guidemother [eld-11]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","artist":"Mila Pesic"},"ardenvale tactician [eld-5]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","artist":"Jason Rainville"},"the royal scions [eld-199]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","artist":"Paul Scott Canavan"},"oko, thief of crowns [eld-197]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1574073631","artist":"Yongjae Choi"},"garruk, cursed huntsman [eld-191]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","artist":"Eric Deschamps"},"command tower [eld-333]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","artist":"Evan Shipard"},"tome of legends [eld-332]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","artist":"Mila Pesic"},"arcane signet [eld-331]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","artist":"Dan Scott"}} \ No newline at end of file +{"inspiring veteran [eld-194]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/c/0c3f372d-259d-4a31-9491-2d369b3f3f8b.jpg?1572490775","artist":"Scott Murphy"},"improbable alliance [eld-193]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/4/0461867b-ec35-4d37-a398-5247e06c4afe.jpg?1572490770","artist":"Zoltan Boros"},"kenrith's transformation [eld-164]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/d/6da7cd39-1f8a-4f68-adb7-df2beac02263.jpg?1572490600","artist":"Kimonas Theodossiou"},"slaying fire [eld-143]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/3/83b5b110-c430-4ffe-9fc1-8e6987f52d1e.jpg?1572490469","artist":"Heonhwa Choe"},"glass casket [eld-15]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/6/562f1c51-d245-4771-bf61-415297e4f9d5.jpg?1572489690","artist":"Anastasia Ovchinnikova"},"piper of the swarm [eld-100]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/a/0a7962fe-b715-4981-86c3-223bad9b1899.jpg?1573503584","artist":"Irina Nordsol"},"fabled passage [eld-244]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/8/b841bfa8-7c17-4df2-8466-780ab9a4a53a.jpg?1572491204","artist":"Howard Lyon"},"castle vantress [eld-242]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/a/0a8b9d37-e89c-44ad-bd1b-51cb06ec3e0b.jpg?1572491190","artist":"John Avon"},"castle locthwain [eld-241]":{"uri":"https://img.scryfall.com/cards/art_crop/front/1/9/195383c1-4723-40b0-ba53-298dfd8e30d0.jpg?1572491183","artist":"Titus Lunter"},"castle garenbrig [eld-240]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/3/e3c2c66c-f7f0-41d5-a805-a129aeaf1b75.jpg?1572491176","artist":"Adam Paquette"},"castle embereth [eld-239]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/b/8bb8512e-6913-4be6-8828-24cfcbec042e.jpg?1572491168","artist":"Jaime Jones"},"castle ardenvale [eld-238]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/f/7f910495-8bd7-4134-a281-c16fd666d5cc.jpg?1572491161","artist":"Volkan Baǵa"},"stonecoil serpent [eld-235]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/3/b34bf7fd-9fe3-43e2-8cfe-7ce7cff08afe.jpg?1572491124","artist":"Mark Poole"},"sorcerous spyglass [eld-233]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/4/e47e85d1-8c4a-43a9-92b3-7cb2a5b89219.jpg?1572491099","artist":"Aaron Miller"},"stormfist crusader [eld-203]":{"uri":"https://img.scryfall.com/cards/art_crop/front/2/7/27425f2e-e0b2-489d-877d-8257d2026bfd.jpg?1572490842","artist":"Chris Rallis"},"outlaws' merriment [eld-198]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/d/5d7585ab-a364-471c-8ef1-318e459b4020.jpg?1572490798","artist":"Suzanne Helmigh"},"lochmere serpent [eld-195]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/2/3287beea-747c-4cb6-aea5-051e85c5de8d.jpg?1572490781","artist":"Sam Burley"},"faeburrow elder [eld-190]":{"uri":"https://img.scryfall.com/cards/art_crop/front/1/c/1ca29912-88b1-413f-ad9d-63d7d1b1ca16.jpg?1572490752","artist":"Raoul Vitale"},"escape to the wilds [eld-189]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/e/3e26c10b-179f-4a6e-bc8d-3ec1d6783fb9.jpg?1572490745","artist":"Chris Ostrowski"},"doom foretold [eld-187]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/7/e76c0c83-3e87-474d-bc72-1677eed32cfa.jpg?1572490732","artist":"Daniel Ljunggren"},"dance of the manse [eld-186]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/d/5dca90ef-1c17-4dcc-9fef-dab9ee92f590.jpg?1572490726","artist":"Yeong-Hao Han"},"yorvo, lord of garenbrig [eld-185]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/e/ae2998a1-1713-467e-a08e-0efd8720aa5b.jpg?1572490720","artist":"Zack Stella"},"wildborn preserver [eld-182]":{"uri":"https://img.scryfall.com/cards/art_crop/front/5/5/55f76830-369e-4224-9ded-7d1ce04c87e4.jpg?1572490704","artist":"Lius Lasahido"},"wicked wolf [eld-181]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/9/09476eac-55d2-4955-8951-ae4ce117c98b.jpg?1572490698","artist":"Tomasz Jedruszek"},"return of the wildspeaker [eld-172]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/8/b88a4943-bd1b-4d10-9cd3-b2ab91b25c10.jpg?1572490646","artist":"Chris Rallis"},"questing beast [eld-171]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/4/e41cf82d-3213-47ce-a015-6e51a8b07e4f.jpg?1572490640","artist":"Igor Kieryluk"},"once upon a time [eld-169]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/0/4034e5ba-9974-43e3-bde7-8d9b4586c3a4.jpg?1576022628","artist":"Matt Stewart"},"the great henge [eld-161]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/f/af915ed2-1f34-43f6-85f5-2430325b720f.jpg?1572490580","artist":"Adam Paquette"},"gilded goose [eld-160]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/0/30377bf0-d9b1-4c14-8dde-f74b1e02d604.jpg?1572490572","artist":"Lindsey Look"},"feasting troll king [eld-152]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/a/9a6bb435-1205-416a-a5a0-ca6d37b4dcb2.jpg?1572490524","artist":"Nicholas Gregory"},"torbran, thane of red fell [eld-147]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/9/79f591cd-d277-4ba5-b1bf-1c09cac9cb8a.jpg?1572490491","artist":"Grzegorz Rutkowski"},"sundering stroke [eld-144]":{"uri":"https://img.scryfall.com/cards/art_crop/front/2/4/24b7a774-ca49-4291-8a19-cb5e475b10d5.jpg?1572490475","artist":"Stanton Feng"},"robber of the rich [eld-138]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/e/0ecbe097-ba51-42e5-957c-382eb66c08f0.jpg?1572490437","artist":"Paul Scott Canavan"},"opportunistic dragon [eld-133]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/f/3fa16922-3583-4f5b-8805-509b95a8da49.jpg?1572490407","artist":"Chris Rahn"},"irencrag pyromancer [eld-128]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/a/9a7b0ead-5629-429d-bede-8154f3fae96d.jpg?1572490380","artist":"Jason Rainville"},"irencrag feat [eld-127]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/5/b5bcf822-e129-45f6-9403-310ce9410f3b.jpg?1572490374","artist":"Yongjae Choi"},"fires of invention [eld-125]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/1/a12b16b0-f75f-42d8-9b24-947c1908e0f7.jpg?1572490362","artist":"Stanton Feng"},"fervent champion [eld-124]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/5/c52d66db-5570-48a1-99cf-e0417517747b.jpg?1572490356","artist":"Steve Argyle"},"embercleave [eld-120]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/a/aaae15dd-11b6-4421-99e9-365c7fe4a5d6.jpg?1572490333","artist":"Joe Slucher"},"witch's vengeance [eld-111]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/b/dbf16457-3444-4130-b220-834b69d9faa3.jpg?1572490276","artist":"Titus Lunter"},"wishclaw talisman [eld-110]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/7/07c17b01-ee5d-491a-8403-b3f819b778c4.jpg?1572490271","artist":"Daarken"},"rankle, master of pranks [eld-101]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/3/93c2c11d-dfc3-4ba9-8c0f-a98114090396.jpg?1572490217","artist":"Dmitry Burmak"},"oathsworn knight [eld-98]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/1/9173ffda-1d3b-4dab-8dcb-de44717de464.jpg?1572490195","artist":"Svetlin Velinov"},"clackbridge troll [eld-84]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/5/85929131-4df6-415c-b592-aefb2943c477.jpg?1572490116","artist":"Svetlin Velinov"},"the cauldron of eternity [eld-82]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/b/eb69473f-de99-43a7-b094-429465ae735c.jpg?1572490105","artist":"Tomasz Jedruszek"},"blacklance paragon [eld-79]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/e/fe0a63bb-dd94-429f-aa9b-21f3d1c53ae5.jpg?1572490086","artist":"Victor Adame Minguez"},"ayara, first of locthwain [eld-75]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/d/ed0ace28-9a33-4f0d-b8c8-f5517f20ccf1.jpg?1572490057","artist":"Ryan Pancoast"},"vantress gargoyle [eld-71]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/a/daff1c8d-0f25-4bec-bd50-208ae2ac0aac.jpg?1572490034","artist":"Cristi Balanescu"},"stolen by the fae [eld-66]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/9/a98a7698-57fb-41f6-86d4-251c7d444c6a.jpg?1572490003","artist":"Ryan Alexander Lee"},"mirrormade [eld-55]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/1/a10c1407-d397-4caa-b7b7-e7d91ffd4ee9.jpg?1572489939","artist":"Volkan Baǵa"},"midnight clock [eld-54]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/f/0f7f1148-7b1b-4969-a2f8-428de1e2e8ff.jpg?1572489934","artist":"Alexander Forssberg"},"the magic mirror [eld-51]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/8/08b89af1-7b22-4153-b42d-a2ea4e0f320c.jpg?1572489916","artist":"Anastasia Ovchinnikova"},"gadwick, the wizened [eld-48]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/2/62ddce0d-f22a-4fcd-9a4a-d71938750ba1.jpg?1572489894","artist":"Colin Boyer"},"folio of fancies [eld-46]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/a/6afc67d1-1018-4a15-ab5f-377fd11dcd3d.jpg?1572489881","artist":"Colin Boyer"},"emry, lurker of the loch [eld-43]":{"uri":"https://img.scryfall.com/cards/art_crop/front/b/f/bf4b9a8a-b42a-46fb-b0d0-9cf800f63c8a.jpg?1574767844","artist":"Livia Prima"},"worthy knight [eld-36]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/b/4b2bde2d-e5df-407e-993c-85880dbb6045.jpg?1572489821","artist":"Yongjae Choi"},"linden, the steadfast queen [eld-20]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/a/fa3ab467-be97-4b84-a73d-b03484d06b97.jpg?1572489720","artist":"Ryan Pancoast"},"hushbringer [eld-18]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/6/663b3e6f-1099-4de8-a0a7-6f1919c38010.jpg?1572489709","artist":"Bastien L. Deharme"},"harmonious archon [eld-17]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/7/c7093834-9627-4da2-9322-c03bfd5b3a71.jpg?1572489703","artist":"Anastasia Ovchinnikova"},"happily ever after [eld-16]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/3/d32d85d5-a6f0-4cc5-9fd6-6b329aae2e5b.jpg?1572489697","artist":"Matt Stewart"},"the circle of loyalty [eld-9]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/9/79093d00-362d-4d07-8a0a-cf5e1ccf9c0f.jpg?1572489653","artist":"Bastien L. Deharme"},"charming prince [eld-8]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/c/dcb94950-3f3e-4876-84f8-d5e4d9cfecee.jpg?1572489646","artist":"Randy Vargas"},"acclaimed contender [eld-1]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/b/fb6b12e7-bb93-4eb6-bad1-b256a6ccff4e.jpg?1572489601","artist":"David Gaillet"},"oakhame ranger [eld-212]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/a/8a665794-513f-4f78-92c9-1844ec27c79c.jpg?1572490907","artist":"Mitchell Malloy & Maddie Julyk"},"tuinvale treefolk [eld-180]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/b/8bc518fc-904e-4e39-aeda-ffb222bfcc82.jpg?1572490693","artist":"Jason A. Engle"},"rosethorn acolyte [eld-174]":{"uri":"https://img.scryfall.com/cards/art_crop/front/2/a/2a0d430f-da84-4752-940c-8457c525aac9.jpg?1572490659","artist":"Johannes Voss"},"lovestruck beast [eld-165]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/c/4ccdef9c-1e85-4358-8059-8972479f7556.jpg?1572490606","artist":"Kev Walker"},"garenbrig carver [eld-156]":{"uri":"https://img.scryfall.com/cards/art_crop/front/1/9/194b7a1c-291a-470e-9a40-61b72a46793b.jpg?1572490548","artist":"Lucas Graciano"},"flaxen intruder [eld-155]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/6/06bd1ad2-fb5d-4aef-87d1-13a341c686fa.jpg?1572490543","artist":"Gabor Szikszai"},"curious pair [eld-150]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/f/7f78a570-d776-42f2-a609-6da0156c8de7.jpg?1572490513","artist":"Daarken"},"beanstalk giant [eld-149]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/6/a66f5ea7-ddbb-4b89-b812-77bd17972cf9.jpg?1572490506","artist":"Jason A. Engle"},"rimrock knight [eld-137]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/3/a3d13d84-01e4-4429-93db-e5afff811527.jpg?1572490430","artist":"Chris Rallis"},"merchant of the vale [eld-131]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/b/0b4399b6-e67f-40d8-8676-f5db7e04a6c9.jpg?1572490397","artist":"David Gaillet"},"embereth shieldbreaker [eld-122]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/c/6cc73d16-5ed7-4104-91f6-0997a2080e2e.jpg?1572490345","artist":"Randy Vargas"},"bonecrusher giant [eld-115]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/9/09fd2d9c-1793-4beb-a3fb-7a869f660cd4.jpg?1572490299","artist":"Victor Adame Minguez"},"smitten swordmaster [eld-105]":{"uri":"https://img.scryfall.com/cards/art_crop/front/f/8/f82541f2-b17c-45b4-87ff-f9b46d23578c.jpg?1572490242","artist":"Taylor Ingvarsson"},"reaper of night [eld-102]":{"uri":"https://img.scryfall.com/cards/art_crop/front/4/d/4dc774b4-3f70-4351-b1b8-8a0193cb3a50.jpg?1572490223","artist":"Jeff Simpson"},"order of midnight [eld-99]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/3/330cc452-4382-401d-9432-ac27ae6e27ad.jpg?1572490205","artist":"Victor Adame Minguez"},"murderous rider [eld-97]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/7/e73d8a84-2c0d-423c-89c7-71de0af9e1ac.jpg?1572490190","artist":"Josh Hass"},"foulmire knight [eld-90]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/5/c5f6c745-e46a-42eb-8eca-b7b74ab1245e.jpg?1572490151","artist":"Alex Brock"},"queen of ice [eld-61]":{"uri":"https://img.scryfall.com/cards/art_crop/front/d/e/de2f964a-e4e1-4321-92ad-34b781868e11.jpg?1572489973","artist":"Eric Deschamps"},"merfolk secretkeeper [eld-53]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/e/ceb7308d-608c-4ede-9496-d795fc5bb271.jpg?1572489928","artist":"Jana Schirmer"},"hypnotic sprite [eld-49]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/a/7acbd812-b994-4e68-8f95-04222796e994.jpg?1572489901","artist":"Irina Nordsol"},"fae of wishes [eld-44]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/3/e3435fd6-8f51-4d99-a278-4ddb088acfe1.jpg?1572489870","artist":"Magali Villeneuve"},"brazen borrower [eld-39]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/2/c2089ec9-0665-448f-bfe9-d181de127814.jpg?1572489838","artist":"Eric Deschamps"},"animating faerie [eld-38]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/2/32158458-42eb-41bc-a15a-11af28463eb0.jpg?1572489832","artist":"Joseph Meehan"},"silverflame squire [eld-31]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/b/7bd105f3-fa33-4490-aea9-b47ca121b664.jpg?1572489785","artist":"Lie Setiawan"},"shepherd of the flock [eld-28]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/0/c0b4f0ce-0d18-4546-803d-94a2f4f30951.jpg?1572489768","artist":"Drew Baker"},"realm-cloaked giant [eld-26]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/e/9e5c8cf1-1d7c-49e5-bfad-7e13c418118f.jpg?1572489756","artist":"Adam Paquette"},"lonesome unicorn [eld-21]":{"uri":"https://img.scryfall.com/cards/art_crop/front/9/9/99083707-2152-42c0-b5c3-b4f97ec20190.jpg?1572489726","artist":"Winona Nelson"},"giant killer [eld-14]":{"uri":"https://img.scryfall.com/cards/art_crop/front/7/5/75754468-2850-42e6-ab22-61ff7b9d1214.jpg?1572489685","artist":"Jesper Ejsing"},"faerie guidemother [eld-11]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/8/e8bbece8-9620-44d9-b991-350fe952538a.jpg?1572489666","artist":"Mila Pesic"},"ardenvale tactician [eld-5]":{"uri":"https://img.scryfall.com/cards/art_crop/front/c/7/c7d5e394-8e41-442e-ae97-a478a61e1b9d.jpg?1572489629","artist":"Jason Rainville"},"the royal scions [eld-199]":{"uri":"https://img.scryfall.com/cards/art_crop/front/6/a/6a7111f3-01a6-4311-bc08-036a1fba60f5.jpg?1572490808","artist":"Paul Scott Canavan"},"oko, thief of crowns [eld-197]":{"uri":"https://img.scryfall.com/cards/art_crop/front/3/4/3462a3d0-5552-49fa-9eb7-100960c55891.jpg?1576516452","artist":"Yongjae Choi"},"garruk, cursed huntsman [eld-191]":{"uri":"https://img.scryfall.com/cards/art_crop/front/a/b/abef512f-8f1d-4257-b16f-c0eed58670ec.jpg?1572490758","artist":"Eric Deschamps"},"command tower [eld-333]":{"uri":"https://img.scryfall.com/cards/art_crop/front/e/c/ec1f1041-f667-4b73-b1f2-e5bcae84095e.jpg?1572482858","artist":"Evan Shipard"},"tome of legends [eld-332]":{"uri":"https://img.scryfall.com/cards/art_crop/front/0/4/040301e8-20c1-4f4c-8766-d05f11415efd.jpg?1572482851","artist":"Mila Pesic"},"arcane signet [eld-331]":{"uri":"https://img.scryfall.com/cards/art_crop/front/8/4/84128e98-87d6-4c2f-909b-9435a7833e63.jpg?1572482845","artist":"Dan Scott"}} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 2036bae29..c76a791cc 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,6 +1,6 @@ module.exports = { - testPathIgnorePatterns: ['/public/'], + testPathIgnorePatterns: ['/public/', '/__tests__/helpers.js'], transform: { '^.+\\.jsx?$': require.resolve('babel-jest'), }, -}; \ No newline at end of file +}; diff --git a/public/js/deleteconfirm.js b/public/js/deleteconfirm.js deleted file mode 100644 index e2e2f98e2..000000000 --- a/public/js/deleteconfirm.js +++ /dev/null @@ -1,25 +0,0 @@ -$('#confirmation').keyup(function() { - if ( - $(this) - .val() - .toLowerCase() == 'delete' - ) { - $('.delete-cube').removeAttr('disabled'); - } else { - $('.delete-cube').attr('disabled', 'disabled'); - } -}); -$('.delete-cube').on('click', function(e) { - $target = $(e.target); - var id = $target.attr('data-id'); - csrfFetch('/cube/remove/' + id, { - method: 'DELETE', - headers: {}, - }).then((response) => { - if (!response.ok) { - console.log(response); - } else { - window.location.href = '/'; - } - }); -}); diff --git a/public/js/packcraft.js b/public/js/packcraft.js index 74543c44b..aa75b0d37 100644 --- a/public/js/packcraft.js +++ b/public/js/packcraft.js @@ -9,11 +9,9 @@ var cardTemplate = var format = []; -var cube = JSON.parse(document.getElementById('cuberaw').value); - $('#customDraftButton').click(function(e) { e.preventDefault(); - format = [['Mythic', 'Mythic', 'Mythic']]; + format = [['rarity:Mythic', 'tag:New', 'identity>1']]; $('#customDraftTitle').val('New Custom Format'); $('#editor').html(''); $('#customDraftHiddenId').val(-1); @@ -116,11 +114,11 @@ $('#customDraftForm').submit(function(e) { $('.editFormatButton').click(function(e) { e.preventDefault(); - format = JSON.parse(cube.draft_formats[e.target.getAttribute('data-id')].packs); - $('#customDraftTitle').val(cube.draft_formats[e.target.getAttribute('data-id')].title); - $('#editor').html(cube.draft_formats[e.target.getAttribute('data-id')].html); - $('#customDraftFormRadioFalse').prop('checked', !cube.draft_formats[e.target.getAttribute('data-id')].multiples); - $('#customDraftFormRadioTrue').prop('checked', cube.draft_formats[e.target.getAttribute('data-id')].multiples); + format = JSON.parse(reactProps.draftFormats[e.target.getAttribute('data-id')].packs); + $('#customDraftTitle').val(reactProps.draftFormats[e.target.getAttribute('data-id')].title); + $('#editor').html(reactProps.draftFormats[e.target.getAttribute('data-id')].html); + $('#customDraftFormRadioFalse').prop('checked', !reactProps.draftFormats[e.target.getAttribute('data-id')].multiples); + $('#customDraftFormRadioTrue').prop('checked', reactProps.draftFormats[e.target.getAttribute('data-id')].multiples); $('#customDraftHiddenId').val(e.target.getAttribute('data-id')); drawFormat(); $('#customDraftModal').modal('show'); diff --git a/routes/cube_routes.js b/routes/cube_routes.js index cf88a59d2..c31c02c3a 100644 --- a/routes/cube_routes.js +++ b/routes/cube_routes.js @@ -40,10 +40,19 @@ let User = require('../models/user'); let Draft = require('../models/draft'); let CardRating = require('../models/cardrating'); -const { ensureAuth, csrfProtection } = require('./middleware'); - const NODE_ENV = process.env.NODE_ENV; +let CubeListPage = null; +let CubePlaytestPage = null; +let DraftView = null; +if (NODE_ENV === 'production') { + CubeListPage = require('../dist/components/CubeListPage').default; + CubePlaytestPage = require('../dist/components/CubePlaytestPage').default; + DraftView = require('../dist/components/DraftView').default; +} + +const { ensureAuth, csrfProtection } = require('./middleware'); + function cardHtml(card) { if (card.image_flip) { return ( @@ -414,12 +423,14 @@ router.get('/overview/:id', async (req, res) => { currentUser = await User.findById(req.user._id); admin = util.isAdmin(currentUser); } - const cube = await Cube.findOne(build_id_query(cube_id)); - if (!cube) { + const cubeResult = await Cube.findOne(build_id_query(cube_id)); + if (!cubeResult) { req.flash('danger', 'Cube not found'); return res.status(404).render('misc/404', {}); } + const cube = cubeResult.toObject(); + var pids = []; cube.cards.forEach(function(card, index) { card.details = carddb.cardFromId(card.cardID); @@ -460,15 +471,30 @@ router.get('/overview/:id', async (req, res) => { cube.raw_desc = cube.descriptionhtml; cube.descriptionhtml = addAutocard(cube.descriptionhtml, carddb, cube); } + + // Performance + delete cube.cards; + + const reactProps = { + cube, + cubeID: cube_id, + userID: user ? user._id : null, + loggedIn: !!user, + canEdit: user && user._id == cube.owner, + owner: user ? user.username : 'unknown', + post: blogs ? blogs[0] : null, + followed: currentUser ? currentUser.followed_cubes.includes(cube._id) : false, + editorvalue: cube.raw_desc, + price: sum.toFixed(2), + admin, + }; + return res.render('cube/cube_overview', { - cube: cube, - is_following: JSON.stringify(currentUser ? currentUser.followed_cubes.includes(cube._id) : null), - cube_id: cube_id, + reactProps, + cube, + cube_id, title: `${abbreviate(cube.name)} - Overview`, activeLink: 'overview', - num_cards: cube.cards.length, - owner: user ? user.username : 'unknown', - post: blogs ? blogs[0] : null, metadata: generateMeta( `Cube Cobra Overview: ${cube.name}`, cube.type ? `${cube.card_count} Card ${cube.type} Cube` : `${cube.card_count} Card Cube`, @@ -476,9 +502,6 @@ router.get('/overview/:id', async (req, res) => { `https://cubecobra.com/cube/overview/${req.params.id}`, ), loginCallback: '/cube/overview/' + req.params.id, - editorvalue: cube.raw_desc, - price: sum.toFixed(2), - admin: JSON.stringify(admin), }); } catch (err) { req.flash('danger', 'Server Error'); @@ -750,10 +773,6 @@ router.get('/compare/:id_a/to/:id_b', function(req, res) { }); }); -let CubeListPage = null; -if (NODE_ENV === 'production') { - CubeListPage = require('../dist/components/CubeListPage').default; -} router.get('/list/:id', async function(req, res) { try { const cube = await Cube.findOne(build_id_query(req.params.id)).setOptions({ lean: true }); @@ -806,6 +825,7 @@ router.get('/list/:id', async function(req, res) { : undefined, reactProps, cube, + cube_id: req.params.id, activeLink: 'list', title: `${abbreviate(cube.name)} - List`, metadata: generateMeta( @@ -835,9 +855,12 @@ router.get('/playtest/:id', async (req, res) => { } const userq = User.findById(cube.owner).exec(); - const decksq = Deck.find({ - cube: cube._id, - }) + const decksq = Deck.find( + { + cube: cube._id, + }, + '_id name owner username date', + ) .sort({ date: -1, }) @@ -846,14 +869,24 @@ router.get('/playtest/:id', async (req, res) => { const [user, decks] = await Promise.all([userq, decksq]); + const reactProps = { + canEdit: user._id.equals(cube.owner), + decks, + cubeID: req.params.id, + draftFormats: cube.draft_formats, + }; + res.render('cube/cube_playtest', { + reactHTML: + NODE_ENV === 'production' + ? await ReactDOMServer.renderToString(React.createElement(CubePlaytestPage, reactProps)) + : undefined, + reactProps, cube: cube, cube_id: req.params.id, activeLink: 'playtest', title: `${abbreviate(cube.name)} - Playtest`, owner: user ? user.username : 'Unknown', - decks: decks, - cube_raw: JSON.stringify(cube), metadata: generateMeta( `Cube Cobra Playtest: ${cube.name}`, cube.type ? `${cube.card_count} Card ${cube.type} Cube` : `${cube.card_count} Card Cube`, @@ -1246,7 +1279,9 @@ function bulkuploadCSV(req, res, cards, cube) { addedTmsp: new Date(), collector_number: split[5], status: split[6], - tags: split[7] && split[7].length > 0 ? split[7].split(',') : [], + finish: split[7], + imgUrl: split[8], + tags: split[9] && split[9].length > 0 ? split[9].split(',') : [], }; let potentialIds = carddb.allIds(card); @@ -1312,7 +1347,7 @@ function bulkuploadCSV(req, res, cards, cube) { function bulkUpload(req, res, list, cube) { cards = list.match(/[^\r\n]+/g); if (cards) { - if (cards[0].trim() == 'Name,CMC,Type,Color,Set,Collector Number,Status,Tags') { + if (cards[0].trim() == 'Name,CMC,Type,Color,Set,Collector Number,Status,Finish,Image URL,Tags') { cards.splice(0, 1); bulkuploadCSV(req, res, cards, cube); } else { @@ -1450,7 +1485,7 @@ router.get('/download/csv/:id', function(req, res) { res.setHeader('Content-disposition', 'attachment; filename=' + cube.name.replace(/\W/g, '') + '.csv'); res.setHeader('Content-type', 'text/plain'); res.charset = 'UTF-8'; - res.write('Name,CMC,Type,Color,Set,Collector Number,Status,Tags\r\n'); + res.write('Name,CMC,Type,Color,Set,Collector Number,Status,Finish,Image URL,Tags\r\n'); cube.cards.forEach(function(card, index) { if (!card.type_line) { card.type_line = carddb.cardFromId(card.cardID).type; @@ -1468,7 +1503,9 @@ router.get('/download/csv/:id', function(req, res) { res.write(card.colors.join('') + ','); res.write('"' + carddb.cardFromId(card.cardID).set + '"' + ','); res.write('"' + carddb.cardFromId(card.cardID).collector_number + '"' + ','); - res.write(card.status + ',"'); + res.write(card.status + ','); + res.write(card.finish + ','); + res.write('"' + card.imgUrl + '","'); card.tags.forEach(function(tag, t_index) { if (t_index != 0) { res.write(', '); @@ -1541,281 +1578,112 @@ router.get('/download/plaintext/:id', function(req, res) { }); }); -function startCustomDraft(req, res, params, cube) { - //setup draft conditions - cards = cube.cards; +router.post('/startdraft/:id', async (req, res) => { + try { + const cube = await Cube.findOne(build_id_query(req.params.id)); - if (cube.draft_formats[params.id].multiples) { - var format = JSON.parse(cube.draft_formats[params.id].packs); - for (j = 0; j < format.length; j++) { - for (k = 0; k < format[j].length; k++) { - format[j][k] = format[j][k].split(','); - for (m = 0; m < format[j][k].length; m++) { - format[j][k][m] = format[j][k][m].trim().toLowerCase(); - } - } + if (!cube) { + req.flash('danger', 'Cube not found'); + return res.status(404).render('misc/404', {}); } - var pools = {}; - //sort the cards into groups by tag, then we can pull from them randomly - pools['*'] = []; - cards.forEach(function(card, index) { - pools['*'].push(index); - if (card.tags && card.tags.length > 0) { - card.tags.forEach(function(tag, tag_index) { - tag = tag.toLowerCase(); - if (tag != '*') { - if (!pools[tag]) { - pools[tag] = []; - } - if (!pools[tag].includes(index)) { - pools[tag].push(index); - } - } - }); - } - }); - var draft = new Draft(); - //setup draftbots - draft.bots = draftutil.getDraftBots(params); - - var fail = false; - var failMessage = ''; + let params = { + id: parseInt(req.body.id), // < 0 is standard draft, otherwise custom draft + seats: parseInt(req.body.seats), + packs: parseInt(req.body.packs), + cards: parseInt(req.body.cards), + }; - draft.picks = []; - draft.packs = []; - draft.cube = cube._id; - draft.pickNumber = 1; - draft.packNumber = 1; - for (i = 0; i < params.seats; i++) { - draft.picks.push([]); - draft.packs.push([]); - for (j = 0; j < format.length; j++) { - draft.packs[i].push([]); - for (k = 0; k < format[j].length; k++) { - draft.packs[i][j].push(0); - var tag = format[j][k][Math.floor(Math.random() * format[j][k].length)]; - var pool = pools[tag]; - if (pool && pool.length > 0) { - var card = cards[pool[Math.floor(Math.random() * pool.length)]]; - draft.packs[i][j][k] = card; - } else { - fail = true; - failMessage = 'Unable to create draft, no card with tag "' + tag + '" found.'; - } - } - } - } - draft.initial_state = draft.packs.slice(); - if (!fail) { - draft.save(function(err) { - if (err) { - console.log(err, req); - } else { - res.redirect('/cube/draft/' + draft._id); - } - }); - } else { - req.flash('danger', failMessage); - res.redirect('/cube/playtest/' + req.params.id); + // setup draft + let draftcards = cube.cards.slice(); + if (draftcards.length == 0) { + throw new Error('Could not create draft: no cards'); } - } else { - var cardpool = util.shuffle(cards.slice()); - var format = JSON.parse(cube.draft_formats[params.id].packs); - for (j = 0; j < format.length; j++) { - for (k = 0; k < format[j].length; k++) { - format[j][k] = format[j][k].split(','); - for (m = 0; m < format[j][k].length; m++) { - format[j][k][m] = format[j][k][m].trim().toLowerCase(); - } - } - } - var draft = new Draft(); - //setup draftbots - draft.bots = draftutil.getDraftBots(params); - - var fail = false; - var failMessage = ''; - - draft.picks = []; - draft.packs = []; + // ensure that cards have details + draftcards.forEach((card, index) => { + card.details = carddb.cardFromId(card.cardID); + }); + let bots = draftutil.getDraftBots(params); + let format = draftutil.getDraftFormat(params, cube); + let draft = draftutil.createDraft(format, draftcards, bots, params.seats); draft.cube = cube._id; - draft.pickNumber = 1; - draft.packNumber = 1; - for (i = 0; i < params.seats; i++) { - draft.picks.push([]); - draft.packs.push([]); - for (j = 0; j < format.length; j++) { - draft.packs[i].push([]); - for (k = 0; k < format[j].length; k++) { - if (!fail) { - draft.packs[i][j].push(0); - var tag = format[j][k][Math.floor(Math.random() * format[j][k].length)]; - var index = draftutil.indexOfTag(cardpool, tag); - //slice out the first card with the index, or error out - if (index != -1 && cardpool.length > 0) { - draft.packs[i][j][k] = cardpool.splice(index, 1)[0]; - } else { - fail = true; - failMessage = 'Unable to create draft, not enough cards with tag "' + tag + '" found.'; - } - } - } - } - } - draft.initial_state = draft.packs.slice(); - if (!fail) { - draft.save(function(err) { - if (err) { - console.log(err, req); - } else { - res.redirect('/cube/draft/' + draft._id); - } - }); - } else { - req.flash('danger', failMessage); - res.redirect('/cube/playtest/' + cube._id); - } + await draft.save(); + return res.redirect('/cube/draft/' + draft._id); + } catch (err) { + console.log(err, req); + req.flash('danger', err); + return res.redirect('/cube/playtest/' + req.params.id); } -} +}); -function startStandardDraft(req, res, params, cube) { - //setup draft conditions - cards = cube.cards; - var cardpool = util.shuffle(cards.slice()); - var draft = new Draft(); - - draft.bots = draftutil.getDraftBots(params); - var totalCards = params.packs * params.cards * params.seats; - if (cube.cards.length < totalCards) { - req.flash( - 'danger', - 'Requested draft requires ' + totalCards + ' cards, but this cube only has ' + cube.cards.length + ' cards.', - ); - res.redirect('/cube/playtest/' + cube._id); - } else { - draft.picks = []; - draft.packs = []; - draft.cube = cube._id; - draft.packNumber = 1; - draft.pickNumber = 1; - for (i = 0; i < params.seats; i++) { - draft.picks.push([]); - draft.packs.push([]); - for (j = 0; j < params.packs; j++) { - draft.packs[i].push([]); - for (k = 0; k < params.cards; k++) { - draft.packs[i][j].push(0); - draft.packs[i][j][k] = cardpool.pop(); +router.get('/draft/:id', async function(req, res) { + try { + const draft = await Draft.findById(req.params.id); + if (!draft) { + req.flash('danger', 'Draft not found'); + return res.status(404).render('misc/404', {}); + } + + names = new Set(); + //add in details to all cards + for (const seat of draft.packs) { + for (const pack of seat) { + for (const card of pack) { + card.details = carddb.cardFromId(card.cardID, 'cmc type image_normal name color_identity'); + names.add(card.details.name); } } } - draft.initial_state = draft.packs.slice(); - draft.save(function(err) { - if (err) { - console.log(err, req); - } else { - res.redirect('/cube/draft/' + draft._id); - } + + const ratingsQ = CardRating.find({ + name: { $in: [...names] }, }); - } -} + const cubeQ = Cube.findOne(build_id_query(draft.cube)); + const [cube, ratings] = await Promise.all([cubeQ, ratingsQ]); -router.post('/startdraft/:id', function(req, res) { - Cube.findOne(build_id_query(req.params.id), function(err, cube) { if (!cube) { req.flash('danger', 'Cube not found'); - res.status(404).render('misc/404', {}); - } else { - let params = { - id: parseInt(req.body.id), - seats: parseInt(req.body.seats), - packs: parseInt(req.body.packs), - cards: parseInt(req.body.cards), - }; - if (req.body.id == -1) { - //standard draft - startStandardDraft(req, res, params, cube); - } else { - startCustomDraft(req, res, params, cube); - } + return res.status(404).render('misc/404', {}); } - }); -}); -router.get('/draft/:id', function(req, res) { - Draft.findById(req.params.id, function(err, draft) { - if (!draft) { - req.flash('danger', 'Draft not found'); - res.status(404).render('misc/404', {}); - } else { - var pickNumber = draft.pickNumber; - var packNumber = draft.packNumber; - var title = 'Pack ' + packNumber + ', Pick ' + pickNumber; - var packsleft = draft.packs[0].length + 1 - packNumber; - var subtitle = packsleft + ' unopened packs left.'; - if (packsleft == 1) { - subtitle = packsleft + ' unopened pack left.'; - } - names = []; - //add in details to all cards - draft.packs.forEach(function(seat, index) { - seat.forEach(function(pack, index2) { - pack.forEach(function(card, index3) { - card.details = carddb.cardFromId(card.cardID); - if (!names.includes(card.details.name)) { - names.push(card.details.name); - } - }); - }); - }); - draftutil.getCardRatings(names, CardRating, function(ratings) { - draft.ratings = ratings; - Cube.findOne(build_id_query(draft.cube), function(err, cube) { - if (!cube) { - req.flash('danger', 'Cube not found'); - res.status(404).render('misc/404', {}); - } else { - User.findById(cube.owner, function(err, user) { - if (!user || err) { - res.render('cube/cube_draft', { - cube: cube, - cube_id: get_cube_id(cube), - owner: 'Unknown', - activeLink: 'playtest', - title: `${abbreviate(cube.name)} - Draft`, - metadata: generateMeta( - `Cube Cobra Draft: ${cube.name}`, - cube.type ? `${cube.card_count} Card ${cube.type} Cube` : `${cube.card_count} Card Cube`, - cube.image_uri, - `https://cubecobra.com/cube/draft/${req.params.id}`, - ), - loginCallback: '/cube/draft/' + req.params.id, - draft_raw: JSON.stringify(draft), - }); - } else { - res.render('cube/cube_draft', { - cube: cube, - cube_id: get_cube_id(cube), - owner: user.username, - activeLink: 'playtest', - title: `${abbreviate(cube.name)} - Draft`, - metadata: generateMeta( - `Cube Cobra Draft: ${cube.name}`, - cube.type ? `${cube.card_count} Card ${cube.type} Cube` : `${cube.card_count} Card Cube`, - cube.image_uri, - `https://cubecobra.com/cube/draft/${req.params.id}`, - ), - loginCallback: '/cube/draft/' + req.params.id, - draft_raw: JSON.stringify(draft), - }); - } - }); - } - }); - }); + const user = await User.findById(cube.owner); + if (!user) { + req.flash('danger', 'Owner not found'); + return res.status(404).render('misc/404', {}); } - }); + + draft.ratings = Object.fromEntries(ratings.map((r) => [r.name, r.value])); + + const reactProps = { + initialDraft: draft, + }; + + res.render('cube/cube_draft', { + reactHTML: + NODE_ENV === 'production' + ? await ReactDOMServer.renderToString(React.createElement(DraftView, reactProps)) + : undefined, + reactProps, + cube, + cube_id: get_cube_id(cube), + owner: user ? user.username : 'Unknown', + activeLink: 'playtest', + title: `${abbreviate(cube.name)} - Draft`, + metadata: generateMeta( + `Cube Cobra Draft: ${cube.name}`, + cube.type ? `${cube.card_count} Card ${cube.type} Cube` : `${cube.card_count} Card Cube`, + cube.image_uri, + `https://cubecobra.com/cube/draft/${req.params.id}`, + ), + loginCallback: '/cube/draft/' + req.params.id, + }); + } catch (e) { + console.error(e); + req.flash('danger', 'Error rendering draft'); + + // FIXME: We should really have a 500 page for this. + return res.status(404).render('misc/404'); + } }); // Edit Submit POST Route @@ -3309,13 +3177,13 @@ router.post( }), ); -router.delete('/remove/:id', ensureAuth, function(req, res) { +router.post('/remove/:id', ensureAuth, function(req, res) { if (!req.user._id) { req.flash('danger', 'Not Authorized'); - res.redirect('/cube/' + req.params.id); + res.redirect('/cube/overview/' + req.params.id); } - let query = build_id_query(req.params.id); + const query = build_id_query(req.params.id); Cube.findOne(query, function(err, cube) { if (err || !cube || cube.owner != req.user._id) { @@ -3324,10 +3192,13 @@ router.delete('/remove/:id', ensureAuth, function(req, res) { } else { Cube.deleteOne(query, function(err) { if (err) { - console.log(err, req); + console.error(err); + req.flash('danger', 'Error removing cube'); + res.redirect('/cube/overview/' + req.params.id); + } else { + req.flash('success', 'Cube Removed'); + res.redirect('/dashboard'); } - req.flash('success', 'Cube Removed'); - res.send('Success'); }); } }); diff --git a/routes/tools_routes.js b/routes/tools_routes.js index 27b1b8061..5040665df 100644 --- a/routes/tools_routes.js +++ b/routes/tools_routes.js @@ -76,7 +76,7 @@ async function topCards(filter, res) { return nonPromo || possible[0]; }); - const ratings = await CardRating.find({ + const ratingsQ = CardRating.find({ name: { $in: names, }, @@ -84,10 +84,22 @@ async function topCards(filter, res) { $gte: MIN_PICKS, }, }); + const cardDataQ = Card.find( + { + cardName: { + $in: names.map((name) => name.toLowerCase()), + }, + }, + 'cardName cubes', + ); + + const [ratings, cardData] = await Promise.all([ratingsQ, cardDataQ]); const ratingDict = new Map(ratings.map((r) => [r.name, r])); + const cardDataDict = new Map(cardData.map((c) => [c.cardName, c])); const fullData = versions.map((v) => { const rating = ratingDict.get(v.name); + const card = cardDataDict.get(v.name.toLowerCase()); /* This is a Bayesian adjustment to the rating like IMDB does. */ const adjust = (r) => (r.picks * r.value + MIN_PICKS * 0.5) / (r.picks + MIN_PICKS); return [ @@ -97,6 +109,7 @@ async function topCards(filter, res) { rating ? adjust(rating) : null, rating ? rating.picks : null, rating && rating.elo ? rating.elo : null, + card ? card.cubes.length : null, ]; }); const nonNullData = fullData.filter((x) => x[3] !== null); @@ -153,6 +166,7 @@ router.get('/topcards', async (req, res) => { res.render('tool/topcards', { numResults: names.length, data, + title: 'Top Cards', }); } catch (err) { console.error(err); diff --git a/serverjs/cards.js b/serverjs/cards.js index d3ea447e0..c7a038122 100644 --- a/serverjs/cards.js +++ b/serverjs/cards.js @@ -48,13 +48,22 @@ function getPlaceholderCard(_id) { }; } -function cardFromId(id) { +function cardFromId(id, fields) { + let details; if (data._carddict[id]) { - return data._carddict[id]; + details = data._carddict[id]; } else { console.log('Could not find card from id: ' + id); - return getPlaceholderCard(id); + details = getPlaceholderCard(id); } + + if (typeof fields === 'undefined') { + return details; + } else if (!Array.isArray(fields)) { + fields = fields.split(' '); + } + + return Object.fromEntries(fields.map((field) => [field, details[field]])); } function getCardDetails(card) { diff --git a/serverjs/cubefn.js b/serverjs/cubefn.js index 9cb983ce8..3eb03d49a 100644 --- a/serverjs/cubefn.js +++ b/serverjs/cubefn.js @@ -94,7 +94,7 @@ function cardsAreEquivalent(card, details) { if (card.cmc != details.cmc) { return false; } - if (card.type_line != details.type_line) { + if (card.type_line && details.type_line && card.type_line != details.type_line) { return false; } if (!util.arraysEqual(card.tags, details.tags)) { @@ -103,7 +103,7 @@ function cardsAreEquivalent(card, details) { if (!util.arraysEqual(card.colors, details.colors)) { return false; } - if (card.finish != details.finish) { + if (card.finish && details.finish && card.finish != details.finish) { return false; } diff --git a/serverjs/draftutil.js b/serverjs/draftutil.js index ac2f6eb9c..469b537ed 100644 --- a/serverjs/draftutil.js +++ b/serverjs/draftutil.js @@ -1,6 +1,148 @@ -var util = require('./util.js'); +const util = require('./util.js'); +const Draft = require('../models/draft'); +const Filter = require('../dist/util/Filter'); -var methods = { +function matchingCards(cards, filter) { + if (filter === null || filter.length === 0 || filter[0] === null || filter[0] === '') { + return cards; + } + return cards.filter((card) => + Filter.filterCard( + card, + filter, + true, // in cube + ), + ); +} + +function makeFilter(filterText) { + console.log('filterText', filterText, filterText === ''); + if (!filterText || filterText === '' || filterText == '*') { + return [null]; + } + + let tokens = []; + let valid = false; + valid = Filter.tokenizeInput(filterText, tokens) && Filter.verifyTokens(tokens); + + // backwards compatibilty: treat as tag + if (!valid || !Filter.operatorsRegex.test(filterText)) { + let tagfilterText = filterText; + // if it contains spaces then wrap in quotes + if (tagfilterText.indexOf(' ') >= 0 && !tagfilterText.startsWith('"')) { + tagfilterText = '"' + filterText + '"'; + } + tagfilterText = 'tag:' + tagfilterText; // TODO: use Filter.tag instead of 'tag' + tokens = []; + valid = Filter.tokenizeInput(tagfilterText, tokens) && Filter.verifyTokens(tokens); + } + + if (!valid) { + throw new Error('Invalid card filter: ' + filterText); + } + return [Filter.parseTokens(tokens)]; +} + +/* Takes the raw data for custom format, converts to JSON and creates + a data structure: + + [pack][card in pack][token,token...] +*/ +function parseDraftFormat(packsJSON, splitter = ',') { + let format = JSON.parse(packsJSON); + for (let j = 0; j < format.length; j++) { + for (let k = 0; k < format[j].length; k++) { + format[j][k] = format[j][k].split(splitter); + for (let m = 0; m < format[j][k].length; m++) { + format[j][k][m] = makeFilter(format[j][k][m].trim()); + } + } + } + return format; +} + +function createPacks(draft, format, seats, nextCardfn) { + let messages = []; + draft.picks = []; + draft.packs = []; + for (let seat = 0; seat < seats; seat++) { + draft.picks.push([]); + draft.packs.push([]); + for (let packNum = 0; packNum < format.length; packNum++) { + draft.packs[seat].push([]); + let pack = []; + for (let cardNum = 0; cardNum < format[packNum].length; cardNum++) { + let result = nextCardfn(format[packNum][cardNum]); + if (result.messages && result.messages.length > 0) { + messages = messages.concat(result.messages); + } + if (result.card) { + pack.push(result.card); + } + } + // shuffle the cards in the pack + draft.packs[seat][packNum] = util.shuffle(pack); + } + } + return { ok: true, messages: messages }; +} + +function standardDraft(cards) { + cards = util.shuffle(cards); + + return function(cardFormat) { + return { card: cards.pop(), message: '' }; + }; +} + +function customDraft(cards, duplicates = false) { + return function(cardFilter) { + if (cards.length === 0) { + throw new Error('Unable to create draft. Not enough cards.'); + } + + // each filter is an array of parsed filter tokens, we choose one randomly + let validCards = cards; + let index = null; + let messages = []; + if (cardFilter.length > 0) { + do { + index = Math.floor(Math.random() * cardFilter.length); + validCards = matchingCards(cards, cardFilter[index]); + if (validCards.length == 0) { + // try another options and remove this filter as it is now empty + cardFilter.splice(index, 1); + messages.push('Warning: no cards matching filter: ' + cardFilter[index]); + } + } while (validCards.length == 0 && cardFilter.length > 1); + + // try to fill with any available card + if (validCards.length == 0) { + // TODO: warn user that they ran out of matching cards + messages.push('Warning: not enough cards matching any filter.'); + validCards = cards; + } + } + + if (validCards.length == 0) { + throw new Error('Unable to create draft, not enough cards matching filter.'); + } + + index = Math.floor(Math.random() * validCards.length); + + // slice out the first card with the index, or error out + let card = validCards[index]; + if (!duplicates) { + // remove from cards + index = cards.indexOf(card); + cards.splice(index, 1); + } + + return { card: card, messages: messages }; + }; +} + +var publicMethods = { getDraftBots: function(params) { var botcolors = Math.ceil(((params.seats - 1) * 2) / 5); var draftbots = []; @@ -17,42 +159,71 @@ var methods = { var colorcombo = [colors.pop(), colors.pop()]; draftbots.push(colorcombo); } + // TODO: order the bots to avoid same colors next to each other return draftbots; }, - indexOfTag: function(cards, tag) { - tag = tag.toLowerCase(); - if (tag == '*') { - return 0; - } - for (let i = 0; i < cards.length; i++) { - if (cards[i].tags && cards[i].tags.length > 0) { - for (let j = 0; j < cards[i].tags.length; j++) { - if (tag == cards[i].tags[j].toLowerCase()) { - return i; - } + + getDraftFormat: function(params, cube) { + let format; + if (params.id >= 0) { + format = parseDraftFormat(cube.draft_formats[params.id].packs); + format.custom = true; + format.multiples = cube.draft_formats[params.id].multiples; + } else { + // default format + format = []; + format.custom = false; + format.multiples = false; + for (let pack = 0; pack < params.packs; pack++) { + format[pack] = []; + for (let card = 0; card < params.cards; card++) { + format[pack].push('*'); // any card } } } - return -1; + return format; }, - getCardRatings: function(names, CardRating, callback) { - CardRating.find( - { - name: { - $in: names, - }, - }, - function(err, ratings) { - var dict = {}; - if (ratings) { - ratings.forEach(function(rating, index) { - dict[rating.name] = rating.value; - }); - } - callback(dict); - }, - ); + + // NOTE: format is an array with extra attributes, see getDraftFormat() + createDraft: function(format, cards, bots, seats) { + let draft = new Draft(); + let nextCardfn = null; + + if (cards.length === 0) { + throw new Error('Unable to create draft: no cards.'); + } + if (bots.length === 0) { + throw new Error('Unable to create draft: no bots.'); + } + if (seats < 2) { + throw new Error('Unable to create draft: invalid seats: ' + seats); + } + + if (format.custom === true) { + nextCardfn = customDraft(cards, format.multiples); + } else { + nextCardfn = standardDraft(cards); + } + + let result = createPacks(draft, format, seats, nextCardfn); + + if (result.messages.length > 0) { + // TODO: display messages to user + draft.messages = result.messages.join('\n'); + } + + if (!result.ok) { + throw new Error('Could not create draft:\n' + result.messages.join('\n')); + } + + // initial draft state + draft.initial_state = draft.packs.slice(); + draft.pickNumber = 1; + draft.packNumber = 1; + draft.bots = bots; + + return draft; }, }; -module.exports = methods; +module.exports = publicMethods; diff --git a/serverjs/util.js b/serverjs/util.js index 429dff399..72bf904e6 100644 --- a/serverjs/util.js +++ b/serverjs/util.js @@ -159,7 +159,7 @@ function wrapAsyncApi(route) { }; } -var methods = { +var exports = { shuffle: function(array, seed) { if (!seed) { seed = Date.now(); @@ -223,4 +223,4 @@ var methods = { wrapAsyncApi, }; -module.exports = methods; +module.exports = exports; diff --git a/src/components/CubeOverviewModal.js b/src/components/CubeOverviewModal.js index bc3239211..3c8a0b512 100644 --- a/src/components/CubeOverviewModal.js +++ b/src/components/CubeOverviewModal.js @@ -17,7 +17,6 @@ import { } from 'reactstrap'; import { csrfFetch } from '../util/CSRF'; -import { fromEntries } from '../util/Util'; import TagInput from './TagInput'; import { TagContextProvider } from './TagContext'; import TextEntry from './TextEntry'; @@ -221,7 +220,7 @@ class CubeOverviewModal extends Component { } render() { - const { cube, tags, isOpen } = this.state; + const { cube, cubeID, tags, isOpen } = this.state; return ( <> @@ -229,7 +228,7 @@ class CubeOverviewModal extends Component { Edit Overview -
+
Cube Name
Array.from(Array(hi - lo).keys()).map((n) => n + lo); +const rangeOptions = (lo, hi) => range(lo, hi).map((n) => ); + +const CardTitleH5 = ({ ...props }) => ; + +const LabelRow = ({ htmlFor, label, children, ...props }) => ( + + + + {children} + + +); + +const CustomDraftCard = ({ format, index, cubeID, canEdit, deleteFormat, ...props }) => ( + + + + Draft Custom Format: {format.title} + + +
+ + + {rangeOptions(4, 11)} + + + + + + + {!canEdit ? ( + '' + ) : ( + <> + + + +
Are you sure? This action cannot be undone.
+ +
+ + )} +
+ + +); + +const StandardDraftCard = ({ cubeID }) => ( + + + + Start a new draft + + + + + {rangeOptions(1, 11)} + + + + + {rangeOptions(5, 21)} + + + + + {rangeOptions(4, 11)} + + + + + + + + + +); + +const DecksCard = ({ decks, cubeID, ...props }) => ( + + + Recent Decks + + + {decks.map((deck) => ( + + ))} + + + View all + + +); + +class SamplePackCard extends Component { + constructor(props) { + super(props); + + this.state = { seed: '' }; + + this.changeSeed = this.changeSeed.bind(this); + } + + changeSeed(e) { + this.setState({ + seed: e.target.value, + }); + } + + render() { + const { cubeID, ...props } = this.props; + return ( + + + View sample pack + + + + + + + + + + + + ); + } +} + +class CubePlaytestPage extends Component { + constructor(props) { + super(props); + + this.state = { + alerts: [], + draftFormats: this.props.draftFormats, + editModal: false, + }; + + this.addFormat = this.addFormat.bind(this); + this.deleteFormat = this.deleteFormat.bind(this); + this.handleChange = this.handleChange.bind(this); + } + + toggle() { + this.setState(({ modal, ...state }) => ({ + ...state, + modal: !modal, + })); + } + + addAlert(data) { + this.setState(({ alerts }) => ({ + alerts: [].concat(alerts, data), + })); + } + + addFormat(format) { + this.setState(({ draftFormats }) => ({ + draftFormats: [].concat(draftFormats, format), + })); + } + + deleteFormat(cube, formatID) { + console.log(formatID); + csrfFetch(`/cube/format/remove/${cube};${formatID}`, { + method: 'DELETE', + }).then( + (response) => { + this.addAlert({ + color: 'success', + children: 'Format successfully deleted.', + }); + this.setState(({ draftFormats }) => ({ + draftFormats: [].concat(draftFormats.slice(0, formatID), draftFormats.slice(formatID + 1)), + })); + }, + this.addAlert.bind(this, { + color: 'danger', + children: 'Failed to delete format.', + }), + ); + } + + handleChange(event) { + const target = event.target; + const value = target.type === 'checkbox' ? target.checked : target.value; + const name = target.name; + + this.setState({ + [name]: value, + }); + } + + render() { + const { canEdit, decks, cubeID } = this.props; + const { alerts, draftFormats } = this.state; + + return ( + <> + + {alerts.map((data) => ( + + ))} + + + {decks.length == 0 ? '' : } + + + + {!draftFormats + ? '' + : draftFormats.map((format, index) => ( + + ))} + + + + + ); + } +} + +export default CubePlaytestPage; diff --git a/src/components/DndProvider.js b/src/components/DndProvider.js index 311ababa4..9c9fc41ce 100644 --- a/src/components/DndProvider.js +++ b/src/components/DndProvider.js @@ -1,3 +1,5 @@ +import React from 'react'; + import { DndProvider } from 'react-dnd'; import HTML5Backend from 'react-dnd-html5-backend'; import TouchBackend from 'react-dnd-touch-backend'; diff --git a/src/components/DraftView.js b/src/components/DraftView.js index f1cc68275..1510e2dd4 100644 --- a/src/components/DraftView.js +++ b/src/components/DraftView.js @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import PropTypes from 'prop-types'; import { Card, CardBody, CardHeader, CardTitle, Col, Collapse, Input, Nav, Navbar, Row, Spinner } from 'reactstrap'; @@ -46,7 +46,11 @@ const Pack = ({ pack, packNumber, pickNumber, picking, onMoveCard, onClickCard } {pack.map((card, index) => ( - + {picking !== index ? false : } { +const DraftView = ({ initialDraft }) => { + useMemo(() => Draft.init(initialDraft), [initialDraft]); + const [pack, setPack] = useState([...Draft.pack()]); const [initialPackNumber, initialPickNumber] = Draft.packPickNumber(); const [packNumber, setPackNumber] = useState(initialPackNumber); diff --git a/src/components/SortableTable.js b/src/components/SortableTable.js index 7dc7b62df..0660b2dae 100644 --- a/src/components/SortableTable.js +++ b/src/components/SortableTable.js @@ -1,8 +1,49 @@ import React, { useState } from 'react'; +import { Tooltip } from 'reactstrap'; + import PagedTable from './PagedTable'; -const SortableTable = ({ sorts, defaultSort, headers, data, rowF }) => { +const Header = ({ header, headerProps, active, sorts, setSort }) => { + const [tooltipOpen, setTooltipOpen] = useState(false); + + const toggleTooltip = () => setTooltipOpen((open) => !open); + + const { tooltip, ...rest } = headerProps; + const sortable = !!sorts[header]; + const tooltipElement = tooltip && ( + + {tooltip} + + ); + if (sortable) { + return ( + setSort(header)} scope="col" {...rest} style={{ cursor: 'pointer', ...rest.style }}> + + {header} + {active ? ' ▼' : ''} + + {tooltipElement} + + ); + } else { + return ( + + {header} + {tooltipElement} + + ); + } +}; + +const SortableTable = ({ sorts, defaultSort, headers, data, rowF, ...props }) => { const [sort, setSort] = useState(defaultSort); const sortKeyF = sorts[sort]; if (sortKeyF) { @@ -10,28 +51,19 @@ const SortableTable = ({ sorts, defaultSort, headers, data, rowF }) => { } const rows = data.map(rowF).flat(); return ( - + - {[...Object.keys(headers)].map((header) => { - const sortable = !!sorts[header]; - if (sortable) { - return ( - setSort(header)} - scope="col" - {...headers[header]} - style={{ cursor: 'pointer', ...headers[header].style }} - > - {header} - {sort === header ? ' ▼' : ''} - - ); - } else { - return {header}; - } - })} + {[...Object.entries(headers)].map(([header, props]) => ( +
+ ))} diff --git a/src/cube_draft.js b/src/cube_draft.js index 4d4435077..00e7fd7e1 100644 --- a/src/cube_draft.js +++ b/src/cube_draft.js @@ -1,10 +1,19 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import Draft from './util/Draft'; - import DraftView from './components/DraftView'; +import ErrorBoundary from './components/ErrorBoundary'; -Draft.init(initialDraft); const wrapper = document.getElementById('react-root'); -wrapper ? ReactDOM.render(, wrapper) : false; +const element = ( + + + +); +if (wrapper) { + if (wrapper.children.length === 0) { + ReactDOM.render(element, wrapper); + } else { + ReactDOM.hydrate(element, wrapper); + } +} diff --git a/src/cube_overview.js b/src/cube_overview.js index 9c9718671..0725ede8e 100644 --- a/src/cube_overview.js +++ b/src/cube_overview.js @@ -18,6 +18,7 @@ import BlogPost from './components/BlogPost'; import CSRFForm from './components/CSRFForm'; import CubeOverviewModal from './components/CubeOverviewModal'; import DynamicFlash from './components/DynamicFlash'; +import ErrorBoundary from './components/ErrorBoundary'; class CubeOverview extends Component { constructor(props) { @@ -27,11 +28,13 @@ class CubeOverview extends Component { this.unfollow = this.unfollow.bind(this); this.error = this.error.bind(this); this.onCubeUpdate = this.onCubeUpdate.bind(this); + this.handleChangeDeleteConfirm = this.handleChangeDeleteConfirm.bind(this); this.state = { followed: this.props.followed, alerts: [], cube: props.cube, + deleteConfirm: '', }; } @@ -88,9 +91,15 @@ class CubeOverview extends Component { }); } + handleChangeDeleteConfirm(event) { + this.setState({ + deleteConfirm: event.target.value, + }); + } + render() { - const { post, price, owner, admin, canEdit } = this.props; - const cube = this.state.cube; + const { post, price, owner, admin, cubeID, canEdit, userID, loggedIn } = this.props; + const { cube, deleteConfirm } = this.state; return ( <> {canEdit && ( @@ -99,7 +108,12 @@ class CubeOverview extends Component {
  • - +
  • @@ -192,10 +206,10 @@ class CubeOverview extends Component {
    Description
    - {cube.descriptionhtml ? ( + {cube.descriptionhtml && cube.descriptionhtml !== 'undefined' ? ( ) : ( - {cube.description} + {cube.description || ''} )} {cube.tags.length > 0 && ( @@ -212,31 +226,57 @@ class CubeOverview extends Component { - {post && } + {post && } + ); } } -const loggedIn = document.getElementById('userid') != null; -const userid = loggedIn ? document.getElementById('userid').value : ''; -const canEdit = document.getElementById('canEdit').value === 'true'; -const blog = JSON.parse(document.getElementById('blogData').value); -const cube = JSON.parse(document.getElementById('cubeData').value); -const price = document.getElementById('priceData').value; -const owner = document.getElementById('ownerData').value; -const admin = JSON.parse(document.getElementById('adminData').value) == true; -const followed = JSON.parse(document.getElementById('followedData').value) == true; const wrapper = document.getElementById('react-root'); const element = ( - + + + ); wrapper ? ReactDOM.render(element, wrapper) : false; diff --git a/src/cube_playtest.js b/src/cube_playtest.js index 41a1b5932..5c2c37e91 100644 --- a/src/cube_playtest.js +++ b/src/cube_playtest.js @@ -1,279 +1,19 @@ import React, { Component, Fragment } from 'react'; import ReactDOM from 'react-dom'; -import { - Button, - Card, - CardBody, - CardFooter, - CardHeader, - CardTitle, - Col, - FormGroup, - Input, - Label, - Row, - UncontrolledAlert, - UncontrolledCollapse, -} from 'reactstrap'; +import CubePlaytestPage from './components/CubePlaytestPage'; +import ErrorBoundary from './components/ErrorBoundary'; -import { csrfFetch } from './util/CSRF'; - -import CSRFForm from './components/CSRFForm'; -import DynamicFlash from './components/DynamicFlash'; -import DeckPreview from './components/DeckPreview'; - -const range = (lo, hi) => Array.from(Array(hi - lo).keys()).map((n) => n + lo); -const rangeOptions = (lo, hi) => range(lo, hi).map((n) => ); - -const CardTitleH5 = ({ ...props }) => ; - -const LabelRow = ({ htmlFor, label, children, ...props }) => ( - - - - {children} - - -); - -const CustomDraftCard = ({ format, index, cubeID, canEdit, deleteFormat, ...props }) => ( - - - - Draft Custom Format: {format.title} - - -
    - - - {rangeOptions(4, 11)} - - - - - - - {!canEdit ? ( - '' - ) : ( - <> - - - -
    Are you sure? This action cannot be undone.
    - -
    - - )} -
    - - -); - -const StandardDraftCard = ({ cubeID }) => ( - - - - Start a new draft - - - - - {rangeOptions(1, 11)} - - - - - {rangeOptions(5, 21)} - - - - - {rangeOptions(4, 11)} - - - - - - - - - -); - -const DecksCard = ({ decks, cubeID, ...props }) => ( - - - Recent Decks - - - {decks.map((deck) => ( - - ))} - - -
    View all - - +const wrapper = document.getElementById('react-root'); +const element = ( + + + ); - -class SamplePackCard extends Component { - constructor(props) { - super(props); - - this.state = { seed: '' }; - - this.changeSeed = this.changeSeed.bind(this); - } - - changeSeed(e) { - this.setState({ - seed: e.target.value, - }); - } - - render() { - const { cubeID, ...props } = this.props; - return ( - - - View sample pack - - - - - - - - - - - - ); +if (wrapper) { + if (wrapper.children.length === 0) { + ReactDOM.render(element, wrapper); + } else { + ReactDOM.hydrate(element, wrapper); } } - -class CubePlaytest extends Component { - constructor(props) { - super(props); - - this.state = { - alerts: [], - draftFormats: this.props.draftFormats, - editModal: false, - }; - - this.addFormat = this.addFormat.bind(this); - this.deleteFormat = this.deleteFormat.bind(this); - this.handleChange = this.handleChange.bind(this); - } - - toggle() { - this.setState(({ modal, ...state }) => ({ - ...state, - modal: !modal, - })); - } - - addAlert(data) { - this.setState(({ alerts }) => ({ - alerts: [].concat(alerts, data), - })); - } - - addFormat(format) { - this.setState(({ draftFormats }) => ({ - draftFormats: [].concat(draftFormats, format), - })); - } - - deleteFormat(cube, formatID) { - console.log(formatID); - csrfFetch(`/cube/format/remove/${cube};${formatID}`, { - method: 'DELETE', - }).then( - (response) => { - this.addAlert({ - color: 'success', - children: 'Format successfully deleted.', - }); - this.setState(({ draftFormats }) => ({ - draftFormats: [].concat(draftFormats.slice(0, formatID), draftFormats.slice(formatID + 1)), - })); - }, - this.addAlert.bind(this, { - color: 'danger', - children: 'Failed to delete format.', - }), - ); - } - - handleChange(event) { - const target = event.target; - const value = target.type === 'checkbox' ? target.checked : target.value; - const name = target.name; - - this.setState({ - [name]: value, - }); - } - - render() { - const { canEdit, decks, cubeID } = this.props; - const { alerts, draftFormats } = this.state; - - return ( - <> - - {alerts.map((data) => ( - - ))} - - - {decks.length == 0 ? '' : } - - - - {!draftFormats - ? '' - : draftFormats.map((format, index) => ( - - ))} - - - - - ); - } -} - -const canEdit = document.getElementById('canEdit').hasAttribute('value'); -const decks = JSON.parse(document.getElementById('deckInput').value || '[]'); -const cubeID = document.getElementById('cubeID').value; -const draftFormats = JSON.parse(document.getElementById('draftFormats').value || '[]'); -const element = ; -const wrapper = document.getElementById('react-root'); -wrapper ? ReactDOM.render(element, wrapper) : false; diff --git a/src/topcards.js b/src/topcards.js index 147c2471d..84b14c14c 100644 --- a/src/topcards.js +++ b/src/topcards.js @@ -37,7 +37,7 @@ class TopCards extends Component { } render() { - const rowF = ([name, img, img_flip, rating, picks, elo]) => + const rowF = ([name, img, img_flip, rating, picks, elo, cubes]) => rating === null ? ( [] ) : ( @@ -47,7 +47,8 @@ class TopCards extends Component { {rating === null ? 'None' : ((1 - rating) * 100).toFixed(0)} {elo === null ? '' : elo.toFixed(0)} - {picks} + {picks === null ? '' : picks} + {cubes === null ? '' : cubes} ); @@ -65,16 +66,23 @@ class TopCards extends Component { />
    row[3], Elo: (row) => -(row[5] || -1), 'Total Picks': (row) => -row[4] }} + sorts={{ + Rating: (row) => row[3], + Elo: (row) => -(row[5] || -1), + 'Total Picks': (row) => -row[4], + Cubes: (row) => -row[6], + }} defaultSort="Rating" headers={{ Name: {}, - Rating: { style: { width: '10rem' } }, - Elo: { style: { width: '10rem' } }, - 'Total Picks': { style: { width: '10rem' } }, + Rating: { style: { width: '10rem' }, tooltip: 'Average draft pick position' }, + Elo: { style: { width: '10rem' }, tooltip: 'Elo rating of card' }, + 'Total Picks': { style: { width: '10rem' }, tooltip: 'Total picks across all cubes' }, + Cubes: { style: { width: '10rem' }, tooltip: 'Cubes containing this card' }, }} data={this.state.data} rowF={rowF} + className="mt-3" /> ); diff --git a/src/util/Filter.js b/src/util/Filter.js index 0197c6f70..e7de858eb 100644 --- a/src/util/Filter.js +++ b/src/util/Filter.js @@ -41,6 +41,9 @@ let categoryMap = new Map([ ['is', 'is'], ]); +const operators = ['>=', '<=', '<', '>', ':', '!=', '=']; +const operatorsRegex = new RegExp('(?:' + operators.join('|') + ')'); + function findEndingQuotePosition(filterText, num) { if (!num) { num = 1; @@ -61,9 +64,8 @@ function tokenizeInput(filterText, tokens) { return true; } - const operators = '>=|<=|<|>|:|!=|='; //split string based on list of operators - let operators_re = new RegExp('(?:' + operators + ')'); + let operators_re = operatorsRegex; if (filterText.indexOf('(') == 0) { if (findEndingQuotePosition(filterText, 0)) { @@ -117,7 +119,7 @@ function tokenizeInput(filterText, tokens) { token.operand = 'none'; } - let quoteOp_re = new RegExp('(?:' + operators + ')"'); + let quoteOp_re = new RegExp('(?:' + operators.join('|') + ')"'); let parens = false; //find category @@ -245,8 +247,9 @@ const verifyTokens = (tokens) => { switch (token(i).category) { case 'color': case 'identity': + // can be a number (0-5) or color: let verifyColors = (element) => { - return element.search(/^[WUBRGC]$/) < 0; + return element.search(/^[WUBRGC012345]$/) < 0; }; if (token(i).arg.every(verifyColors)) { return false; @@ -467,55 +470,108 @@ function filterApply(card, filter, inCube) { res = card.details.oracle_text.toLowerCase().indexOf(filter.arg) > -1; } if (filter.category == 'color' && card.details.colors !== undefined) { - switch (filter.operand) { - case ':': - case '=': - if (filter.arg.length == 1 && filter.arg[0] == 'C') { - res = !card.details.colors.length; - } else { - res = areArraysEqualSets(card.details.colors, filter.arg); - } - break; - case '<': - res = - arrayContainsOtherArray(filter.arg, card.details.colors) && card.details.colors.length < filter.arg.length; - break; - case '>': - res = - arrayContainsOtherArray(card.details.colors, filter.arg) && card.details.colors.length > filter.arg.length; - break; - case '<=': - res = - arrayContainsOtherArray(filter.arg, card.details.colors) && card.details.colors.length <= filter.arg.length; - break; - case '>=': - res = - arrayContainsOtherArray(card.details.colors, filter.arg) && card.details.colors.length >= filter.arg.length; - break; + let is_number = filter.arg.length == 1 && parseInt(filter.arg[0], 10) >= 0; + if (!is_number) { + switch (filter.operand) { + case ':': + case '=': + if (filter.arg.length == 1 && filter.arg[0] == 'C') { + res = !card.details.colors.length; + } else { + res = areArraysEqualSets(card.details.colors, filter.arg); + } + break; + case '<': + res = + arrayContainsOtherArray(filter.arg, card.details.colors) && card.details.colors.length < filter.arg.length; + break; + case '>': + res = + arrayContainsOtherArray(card.details.colors, filter.arg) && card.details.colors.length > filter.arg.length; + break; + case '<=': + res = + arrayContainsOtherArray(filter.arg, card.details.colors) && card.details.colors.length <= filter.arg.length; + break; + case '>=': + res = + arrayContainsOtherArray(card.details.colors, filter.arg) && card.details.colors.length >= filter.arg.length; + break; + } + } else { + // check for how many colors in identity + let num_colors = card.details.colors.length; + let filter_num = parseInt(filter.arg[0], 10); + + switch (filter.operand) { + case ':': + case '=': + res = num_colors == filter_num; + break; + case '<': + res = num_colors < filter_num; + break; + case '>': + res = num_colors > filter_num; + break; + case '<=': + res = num_colors <= filter_num; + break; + case '>=': + res = num_colors >= filter_num; + break; + } } } if (filter.category == 'identity' && color_identity !== undefined) { - switch (filter.operand) { - case ':': - case '=': - if (filter.arg.length == 1 && filter.arg[0] == 'C') { - res = color_identity.length === 0; - } else { - res = areArraysEqualSets(color_identity, filter.arg); - } - break; - case '<': - res = arrayContainsOtherArray(filter.arg, color_identity) && color_identity.length < filter.arg.length; - break; - case '>': - res = arrayContainsOtherArray(color_identity, filter.arg) && color_identity.length > filter.arg.length; - break; - case '<=': - res = arrayContainsOtherArray(filter.arg, color_identity) && color_identity.length <= filter.arg.length; - break; - case '>=': - res = arrayContainsOtherArray(color_identity, filter.arg) && color_identity.length >= filter.arg.length; - break; + let is_number = filter.arg.length == 1 && parseInt(filter.arg[0], 10) >= 0; + if (!is_number) { + // handle args that are colors: e.g ci:wu, ci>wu + switch (filter.operand) { + case ':': + case '=': + if (filter.arg.length == 1 && filter.arg[0] == 'C') { + res = color_identity.length === 0; + } else { + res = areArraysEqualSets(color_identity, filter.arg); + } + break; + case '<': + res = arrayContainsOtherArray(filter.arg, color_identity) && color_identity.length < filter.arg.length; + break; + case '>': + res = arrayContainsOtherArray(color_identity, filter.arg) && color_identity.length > filter.arg.length; + break; + case '<=': + res = arrayContainsOtherArray(filter.arg, color_identity) && color_identity.length <= filter.arg.length; + break; + case '>=': + res = arrayContainsOtherArray(color_identity, filter.arg) && color_identity.length >= filter.arg.length; + break; + } + } else { + // check for how many colors in identity + let num_colors = color_identity.length; + let filter_num = parseInt(filter.arg[0], 10); + + switch (filter.operand) { + case ':': + case '=': + res = num_colors == filter_num; + break; + case '<': + res = num_colors < filter_num; + break; + case '>': + res = num_colors > filter_num; + break; + case '<=': + res = num_colors <= filter_num; + break; + case '>=': + res = num_colors >= filter_num; + break; + } } } if (filter.category == 'mana' && card.details.parsed_cost) { @@ -740,4 +796,13 @@ function filterApply(card, filter, inCube) { } } -export default { tokenizeInput, verifyTokens, parseTokens, filterCard, filterCards, filterCardsDetails }; +export default { + operators, + operatorsRegex, + tokenizeInput, + verifyTokens, + parseTokens, + filterCard, + filterCards, + filterCardsDetails, +}; diff --git a/views/cube/cube_blog.pug b/views/cube/cube_blog.pug index 8ac9ecbef..72e0ae052 100644 --- a/views/cube/cube_blog.pug +++ b/views/cube/cube_blog.pug @@ -61,3 +61,4 @@ block scripts include ../react script(src='/js/blog.js') script(src='/js/cube_blog.bundle.js') + script(src='/js/texteditor.js') diff --git a/views/cube/cube_draft.pug b/views/cube/cube_draft.pug index 4c56356f2..024a1806e 100644 --- a/views/cube/cube_draft.pug +++ b/views/cube/cube_draft.pug @@ -5,11 +5,11 @@ block cube_toolbar block cube_content include ../dynamic_flash - #react-root + #react-root !{reactHTML} block scripts include ../react script(src='/js/autocard.js') script(type='text/javascript'). - var initialDraft = !{draft_raw}; + var reactProps = !{JSON.stringify(reactProps)}; script(src='/js/cube_draft.bundle.js') diff --git a/views/cube/cube_layout.pug b/views/cube/cube_layout.pug index a5f4d9997..f57f604dc 100644 --- a/views/cube/cube_layout.pug +++ b/views/cube/cube_layout.pug @@ -12,14 +12,14 @@ block content | (#{cube.card_count} Card #{cube.type} Cube) .d-flex.flex-row.flex-wrap li.nav-item - a.nav-link(href='/cube/overview/'+cube._id, class=activeLink === 'overview' && 'active') Overview + a.nav-link(href='/cube/overview/'+cube_id, class=activeLink === 'overview' && 'active') Overview li.nav-item - a.nav-link(href='/cube/list/'+cube._id, class=activeLink === 'list' && 'active') List + a.nav-link(href='/cube/list/'+cube_id, class=activeLink === 'list' && 'active') List li.nav-item - a.nav-link(href='/cube/playtest/'+cube._id, class=activeLink === 'playtest' && 'active') Playtest + a.nav-link(href='/cube/playtest/'+cube_id, class=activeLink === 'playtest' && 'active') Playtest li.nav-item - a.nav-link(href='/cube/analysis/'+cube._id, class=activeLink === 'analysis' && 'active') Analysis + a.nav-link(href='/cube/analysis/'+cube_id, class=activeLink === 'analysis' && 'active') Analysis li.nav-item - a.nav-link(href='/cube/blog/'+cube._id, class=activeLink === 'blog' && 'active') Blog + a.nav-link(href='/cube/blog/'+cube_id, class=activeLink === 'blog' && 'active') Blog block cube_toolbar block cube_content diff --git a/views/cube/cube_overview.pug b/views/cube/cube_overview.pug index a1248aae8..924dfb6d1 100644 --- a/views/cube/cube_overview.pug +++ b/views/cube/cube_overview.pug @@ -9,50 +9,10 @@ block cube_toolbar block cube_content #react-root - - input#blogData(type='hidden', value=(post?post:'false')) - input#cubeData(type='hidden', value=cube) - input#priceData(type='hidden', value=price) - input#ownerData(type='hidden', value=owner) - input#adminData(type='hidden', value=admin) - input#followedData(type='hidden', value=is_following) - if user - input#userid(type='hidden', value=user._id) - input#canEdit(type='hidden', name='canEdit', value=user && user.id == cube.owner ? 'true' : 'false') - - if user - if user.id == cube.owner - #deleteModal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='deleteModalLabel', aria-hidden='true') - .modal-dialog(role='document') - .modal-content - .modal-header - h5.modal-title Confirm Delete - button.close(type='button', data-dismiss='modal', aria-label='Close') - span(aria-hidden='true') × - .modal-body - P Are you sure you wish to delete this post? This action cannot be undone. - .modal-footer - input.btn.btn-danger.delete-blog(type='submit',value='Delete', data-id='', id="delete") - button.btn.btn-secondary(type='button', data-dismiss='modal') Cancel - - #deleteCubeModal.modal.fade(tabindex='-1', role='dialog', aria-labelledby='deleteCubeModalLabel', aria-hidden='true') - .modal-dialog(role='document') - .modal-content - .modal-header - h5.modal-title Confirm Delete - button.close(type='button', data-dismiss='modal', aria-label='Close') - span(aria-hidden='true') × - .modal-body - P Are you sure you wish to delete this cube? This action cannot be undone. - P Please type 'Delete' in order to confirm - input.form-control(id="confirmation", type="text") - .modal-footer - input.btn.btn-danger.delete-cube(type='submit',value='Delete', data-id=cube_id, disabled="", id="delete") - button.btn.btn-secondary(type='button', data-dismiss='modal') Cancel block scripts include ../react - script(src='/js/csrf.js') - script(src='/js/blog.js') - script(src='/js/deleteconfirm.js') + script(type='text/javascript'). + var reactProps = !{JSON.stringify(reactProps)}; + script(src='/js/cube_overview.bundle.js') diff --git a/views/cube/cube_playtest.pug b/views/cube/cube_playtest.pug index e3efb80a4..0150d854a 100644 --- a/views/cube/cube_playtest.pug +++ b/views/cube/cube_playtest.pug @@ -15,10 +15,6 @@ block cube_toolbar block cube_content include ../dynamic_flash - input#deckInput(type='hidden', value=decks) - input#cubeID(type='hidden', value=cube_id) - input#canEdit(type='hidden', value=user && user.id == cube.owner) - input#draftFormats(type='hidden', value=cube.draft_formats) #react-root if user if user.id == cube.owner @@ -67,7 +63,7 @@ block cube_content input#customDraftHiddenHTML(type='hidden', name='html') include ../texteditor br - p Card values can either be single tags (not case sensitive), or a comma separated list of tags to create a ratio (e.g. 3:1 rare to mythic could be "rare, rare, rare, mythic"). '*' can be used to match any card. + p Card values can either be single tags or filter parameters or a comma separated list to create a ratio (e.g. 3:1 rare to mythic could be #[code rarity:rare, rarity:rare, rarity:rare, rarity:mythic]). Tags can be specified #[code tag:yourtagname] or simply #[code yourtagname]. #[code *] can be used to match any card. .format-area#customDraftBody a.btn.btn-success#AddPackButton(href='#') Add Pack .modal-footer @@ -78,5 +74,8 @@ block cube_content block scripts include ../react + script(type='text/javascript'). + var reactProps = !{JSON.stringify(reactProps)}; script(src='/js/cube_playtest.bundle.js') - script(src='/js/packcraft.js') + script(src='/js/packcraft.js', async) + script(src='/js/texteditor.js', async) diff --git a/views/info/filters.pug b/views/info/filters.pug index 07429eea7..7018aa9d5 100644 --- a/views/info/filters.pug +++ b/views/info/filters.pug @@ -45,6 +45,7 @@ block content p Operators supported: #[code :], #[code =], #[code <], #[code >], #[code <=], #[code >=]. p In addition to #[code w], #[code u], #[code b], #[code r], #[code g] and #[code c], you can use color words like #[code white], #[code blue], #[code green], etc. p You can also use all shard, wedge, or guild names, like #[code azorius], #[code bant], #[code dimir], etc. + p You can also compare by number of colors by using numbers instead of color names. p Color Identity searches will respect any color identity overrides you have set. p b Examples: @@ -61,6 +62,9 @@ block content tr td(scope="col") #[code ci>wu] td(scope="col") 3+ color cards that contain #[code uw] + tr + td(scope="col") #[code ci>1] + td(scope="col") Cards with more than 1 color in their identity .card #card-type-syntax.card-header(data-toggle="collapse" data-target="#collapseThree" aria-expanded="true" aria-controls="collapseThree") button(class="btn btn-link" type="button" ) diff --git a/views/texteditor.pug b/views/texteditor.pug index eb134e8e5..56033e6cd 100644 --- a/views/texteditor.pug +++ b/views/texteditor.pug @@ -1,7 +1,5 @@ - link(rel='stylesheet' href='/css/texteditor.css') - br em To tag cards in post, use '[[cardname]]'. E.g. [[Island]] .card @@ -21,7 +19,3 @@ em To tag cards in post, use '[[cardname]]'. E.g. [[Island]] a.toolbar-item(href='#' data-command='insertUnorderedList') ul a.toolbar-item(href='#' data-command='insertOrderedList') ol #editor(contenteditable='') !{editorvalue} - - - -script(src='/js/texteditor.js') diff --git a/webpack.common.js b/webpack.common.js index efe6e58a3..bba9c49b5 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -51,8 +51,10 @@ const clientConfig = merge(config, { const serverConfig = merge(config, { target: 'node', entry: { - CubeListPage: './src/components/CubeListPage.js', - DashboardPage: './src/components/DashboardPage.js', + CubeListPage: './components/CubeListPage.js', + CubePlaytestPage: './components/CubePlaytestPage.js', + DashboardPage: './components/DashboardPage.js', + DraftView: './components/DraftView.js', }, output: { filename: '[name].js',