research and an entrepreneur who does a lot of things with security. He learned how to use MS-DOS at the age of seven and that was when he also started to master his father's computer. And as you will see now in his lecture, he likes to take things apart and he will present you now how intermediate code transformations can be used to upfuscate code with all the advantages and limitations this has. So please give a warm applause for his lecture, an LLVM upfuscator, yeah for Klondike please. Wow, I'm actually surprised that there is people to see this because this is research from like five years ago so I was not even expecting that it could be accepted. Well, before I start, everybody remember to drink water, it's really hot outside. I know I'm a Spanish, believe me, I feel like at home here, so okay. My name is Klondike and well this was my master's thesis five years ago and I'm going to try to explain you how you can use LLVM in order to upfuscate code. When I started working on this project, well LLVM was not a big, suits a big thing as it is now because now you can actually compile JavaScript with LLVM and this is actually a really useful way to, for example, prevent anybody from, well, looking at your JavaScript code. But my main objective with this talk was actually making it easier to prevent attacks when you send a patch to a specific application. So, well, here is the typical mandatory slide I usually have to put so I can actually get paid by my company, which I actually own legally for giving this talk here and paid for my ticket. So, yeah, I work at the company, blah, blah, blah, let's just skip that because I don't think anybody's interested on that. I will introduce you a little bit to how LLVM works and what offuscation is so the people that have almost no knowledge can probably follow the talk. I'm going to talk about different offuscation techniques. Then I will talk about how you can use reproducible offuscation in order to try to delay attacks against patches that you have already released. And then I will try to do a full demo that, well, it worked on my computer, but now not even the mouse is working on my computer, so I hope it works. LLVM is basically a framework for compilers, a compiler, as you probably know, is a tool that picks code in one programming language and returns code in other programming languages or in assembly or even in machine code. It's really cool because it provides a lot of tools to work with an intermediate representation of the code you are translating. So, as most modern compilers, LLVM basically picks coding with several languages you want to use. Then it converts it to its own internal language and then finally converts that internal language to the real code that you are going to use afterwards. And, well, the best thing is that it's really, really useful because if you write one obfuscation transformation or some code that will obfuscate the resulting code in handling the intermediate representation, then all of a sudden you can use all of the compilers that use LLVM and all of the outputs that LLVM can use. C-lang in particular is the frontend for using CSI languages. There is another one called Dragoneg that is based on GCC. And it basically generates LLVM intermediate representation code out of C, and, well, C++ and other languages like that. About obfuscation, well, CNC-1 is basically the main author of which I inspired my work. But there is, of course, a lot of prior research mostly from malware developers. I guess that if any of you has to work with doing reverse engineering, you probably know that. And the main objective of obfuscation is basically making and clear what the programmer is trying to do with his code so that when you try to figure out what it's doing, it will take you longer, and therefore it will be harder for you to be able to do something useful out of the code that you get. Here are some obfuscations techniques that are used. Control-flattening basically tries to make sure that all the control flows and that is basically the place where you jump after you are done executing some instructions, end up on the same place, and that specific place will then choose whether you want to continue executing the code. That makes it really, really hard to figure out, for example, how a group of ifs and while's work, because if you have a program with quite a few quite a few control flow instructions like twos, all of them will end up on exactly the same place, and then you will need to figure out out of a value that will be on a register, which is the path that the execution will follow afterwards. Constant obfuscation is also a pretty classical technique. I guess that if any of you has been doing CTF challenges, you probably know it. The classical one is picking up the string and exerting it with a specific value, but there are quite a few other techniques. You can, for example, store some of the constants in memory and then fetch them so that the constants get more spread away. You can also, for example, use additions, subtractions, and in general, any operation that is reversible in order to get back the original code, the original constant that you had. Then you have opaque predicates. Opaque predicates are basically functions that will always return the same, no matter which value you put as inputs, but are really complex and therefore are really hard to debug. Then we have register swapping. It's a really old technique, especially if you want to get polymorphins. That is basically code. That is different, and it basically tries to change the registers that are used on the different instructions. Register swapping, obviously, is impossible to do in intermediate representation because there is absolutely no registers there. Basically, you have an infinite number of them and you have to assign one new register every time you execute or you put an instruction. But I will show you how you can actually do some tricks in order to make the resulting code to end up in register swaps. And finally, we have that code insertion that basically involves putting code inside of your code that does nothing and that will never be used. And code reordering, which is basically a way to make sure that you get a lot more different programs out of the original program by using the instructions in different places. So, sorry. Okay. I'm sorry. My wallet manager just pooped in because I had to restart my computer. So, well, as you can see, basically, the main reason why we want to use LLBM mixed with obfuscation is because we can then use these obfuscation transformations in a lot of different places. We can use it with JavaScript code. We can use it with C code. We can even use it with Haskell code. I think Rust also uses LLBM as a backend nowadays, but my memory might be a bit flaky. And then you can also use the resulting code in a lot of different architectures. I mean, even the Radeon processors, sorry, the Radeon graphic cards are supported by LLBM backend. So, you can get an idea of the broad range of architectures that you can use when you use LLBM. And the main reason for this is that you only need to write your code once and then use it in a lot of different places, which makes life a lot easier. Of course, there is a really big drawback, and that means that it's really hard to use very, very architecturally specific obfuscation techniques here, in which case, well, you probably want to write a specific tool for the architecture you are going to use. So, control flattening is the first of the techniques that I am going to talk about. As I told you, basically, the idea is put all the control flows inside of the same place, and then on that place decide where you are going to continue execution. The way in which we do it in LLBM is using a fee node in order to choose a specific value that will depend on the source node, that is, basically, which of the different basic blocks or possible execution blocks the execution flow is coming from. In case that we have an if or another conditional instruction, then we can use a switch beforehand in order to choose one value or the other without having to add a new branching instruction. And the main idea, basically, is that we have to map our conditional instructions into specific conditional moves and other conditional instructions so that the jumps will always be striked to the original block. Another trick that is really important to have here and that helps a lot is to add an initial block at the beginning of the execution so that all the initialization of the function will not be at the beginning, but will be after the first jump. How do you detect that? Well, there is always going to be a really big note in your call graph that everything goes through, and that is basically the main way in which you can detect if that kind of technique is being used. And you will probably see, at least with my specific tool, that there is absolutely no conditional jumps going on. All of the jumps will be always some conditional. How do you reverse it? Well, if you can calculate the destination after the second jump, that means after you have gone over the main block that decides where the execution flow will continue, then you can regenerate the original call graph, and by doing that, you will be able to get the original code. If anybody is going to ask me, no, I don't have code for that because my main work here was on obfuscation techniques. This is basically in case anybody wants to follow these research. And well, you can also convert the beings of a conditional instruction plus a jump into a specific conditional jump. So, here is the first demo, or well, in order to explain how this works, this will... If we go here, I need to open a div3, and I guess that, yeah, of cascade constants, not control flattening, they're going to go for the two of these files. So, here you can basically see... Let me make it a bit bigger if I can. Okay, basically here you can see the difference between one function and the other. Here in the left, you have to cascade this code and on the right you have the originally generated code. As you can see, basically we have a main block, and every other function we have, sorry, every other jump that we have on here, jumps back to the original code. So, you will see a lot of jumps here going back to the main block. If we continue, we can go over constant obfuscation. Constant obfuscation is another technique to make it really unclear what you are doing. For example, it's a lot easier to understand 3.1415 being p, as compared to having, for example, the excerpt of two different values and then converting that into a floating point number. The way in which it works is basically that we choose a constant that we can obfuscate because there are a few constants that have to remain constant inside of LLBN code. Then we pick one of the techniques. In my case, I only have implemented two. One of them is obfuscating the constants using different arithmetic operations or using an access to a global variable that contains all of the constants in memory. Then when we are done with this step, we can decide to obfuscate everything again. We do that in order to make the code a lot larger and a lot harder to follow. You have to be really careful when you do that because if you choose code with a really high probability of obfuscation, you might end up filling your memory out of useless code and making a really large program that you cannot continue processing afterwards. So the way in which you can detect it is that there are basically going to be really few instructions that actually have constant parameters. And the ones that exist, they are usually not properly optimized set out, which is a really weird thing to have in most code. And you will see also a lot of memory access only for constant values. And another problem I have is that I am not used to work with two screens at the same time. Sorry about that. Okay, so the demo that I have for this one is this one, so start.s, capital S. So here you can see an example of the differences between one function and the other. If you go to the beginning, you will see, for example, the original code on the right is fairly simple. It will just do a printf of the number of arguments multiplied by a different set of constants. One, two, three, four, five, etc. If you go on the left, you will see that, for example, in order to calculate the value two, we are doing approximately... We are basically doing an XOR in order to get a value and then we are multiplying or shifting by the constant number one, which is basically a multiplication by two. So as you can see, this is a really good way of making a lot of useless code that will be hard for a person that is trying to reverse to understand. It, of course, will affect performance if you abuse it too much, so you should always be really careful. Okay, so to continue with this, then the next... Okay, so the next technique that I am going to talk is about splitting basic blocks. For those of you that don't know, a basic block is basically a set of instructions that have no jumps inside, so a completely linear set of instructions. Do you know that the control flow will always start at the beginning of the basic block and end at the end of the basic block without getting hold of that block? Well, that's not exactly true because in LLVM, some parts can actually be considered part of a basic block. But in general, that is the idea. The idea is that what we do is that we use divide these basic blocks in the middle by adding some extra conditional branches because that will make things like control flattening a lot harder to the back because if instead of having 50 lines of code doing the initialization of the program, you have five different blocks with ten lines each. It's going to be a lot harder to understand what it is doing and it's going to take significantly more time in order to figure out what the program is trying to solve. The way in which this can be detected is because you will see a lot of unconditional jumps inside of your code. A lot of them will be totally useless and that is what makes the change to be really clear because there is usually no reason to put an unconditional jump when there is only one pattern for that specific block of code that you are going to execute afterwards. And the way in which you can obviously reverse it is by merging these kinds of blocks into a single one. This can also be automated. As I said, this was not part of my work so hopefully somebody will do it at some point in the future. Then we can also reorganize these basic blocks into completely different fashions. This is a really trivial transformation and the reason why it works is because each block is completely independent from the other. So as long as the first block, which is the entry block, is the same, everything else can be reordered in the way you want. And it can be detected because usually when you generate code with a compiler, you will try to follow the code that you had originally from top to bottom. So it's quite unlikely, for example, that you will find the returns early in the code. Instead, it's more likely you will find the main return out in the lower parts of the code. And you can probably try to reverse it, at least in part, by using a more breadth-first search ordering when you are outputting the original blocks into the new code that you want to generate. I will show you the demos of these later because that's probably going to speed up the talk a little bit. As I am having a lot of problems here. Run-ins basically tries to keep track of all the dependencies between the instructions and then reorders the instructions completely randomly. The idea is that you pick one of the instructions that have no dependencies, put that instruction the first one, or well, the last one is outside of the basic block, and then afterwards, you will go mark out the instructions that have no more dependencies as a label to be issued and repeat the process. If this sounds familiar, it's because if you have been working with hardware architectures, this is basically what Tomasulo algorithms tries to do inside of an out of order processor in order to speed up code execution. But instead, we are doing this inside of the compiler, instead of the processor. It's a bit hard to detect this kind of thing because the way in which a compiler will issue the code inside of a basic block, especially after optimizations, it's fairly, fairly random. But you can either try to detect that the code is really, really, really unoptimized or really weird optimizations, or you can try to find if you have a code that should be much farther away below being integrated into the middle of a really complex of a really complex expression that you are calculating. It can be reversed if you try to set up a proper ordering on the way in which instructions should be issued. And, well, that will not completely defeat the fuscation technique because the code will still be different from the original one, but it will make it a lot easier to read the code afterwards. Then we can also reorder functions randomly and that will make the code vary a lot This is usually not a good thing if you want to issue small patches, but it's really useful if you want to make the code a little bit harder to follow because most programmers will try to have a more or less good ordering on how the functions work so that, for example, you declare functions that you are going to call first and then the functions that are calling them afterwards. But you have absolutely no reason to follow this kind of ordering. You can put the functions in any order you want and that is exactly what we are doing here. Same thing with globals. You usually put globals in a specific ordering in your code. For example, you put them close to wherever you are going to use them, but you can just place them wherever you want and change the order completely. These ones can be detected easily, but they can be reversed, for example, if you order all of the functions and the globals alphabetically. And by doing that, basically, you kind of defeat the whole transformation when you try to detect changes between the original code and the code that was obfuscated. Then we have finally the swap ops transformation and this is a way to get a lot of more polymorphins and it's the closest thing that we can do to a register swap when using LLBM intermediary representation. The idea is simple. If we, for example, are adding one plus two, we are going to get the same result if we do two plus one. So we mark the operations that have their operands swapped and randomly decide whether we want to swap them or not. So the code will look different every time that we execute this transformation. Unless, of course, we do exactly the same choices. The way in which we can reverse it, well, you can try to reorder the operands using properly defined ordering and, for example, that means that you can put first constant accesses, then a specific register accesses, and, for example, try to put the register accesses that are closest to the function first. That will make the code always have the same ordering and that means that different versions of the code applied that have had this algorithm applied will always look the same. Of course, this is not as easy as it seems once you convert the code to assembly because you will need to get back the original LLBM code out of the assembly code. So now that we are done with this part of the talk and before I go talking about why I actually did this work, I think I'm going to try to show you the transformations because that's probably a lot more interesting for you. So I have shown you already the control flattening until a constant obfuscation transformations and what I am going to try to show you now is the, well, the other ones, for example, the drastic block splitting first and then the random ordering once. So, for example, if we open this code, I'm going to put it on the screen for all of you to see, this is basically the BB split function and as you can see what was at the beginning had really a straight forward code that had absolutely no branches. It's becoming a lot more hellish code to follow because you have a branch every few instructions there. As I said, this by itself is pretty useless because this is really easy to reverse and it doesn't provide much of an advantage but if you apply control flattening afterwards, this transformation becomes really, really strong because the control flattening will force the person that is trying to reverse the code to go back always to the main node that will decide where the execution flow will control every few instructions. So that is one of the demos. Then the next one and a half is for random ordering of basic blocks and you will see that this one is actually a really simple one also. So, if I move to the screen here, here you can see that of the execution flow is mostly the same, the functions change a lot and the reason why they do that is because now we are issuing instructions in a random order. So if we check the right code, which is the original code, you will see that basically the control flow of the function is pretty much linear.  But if you could check the code on the left, you will see, for example, that the SDRCMP that was used as part of the first node, second ETH, at the beginning of the code, now it's at the bottom and what happens is that the function, the jump that was at the beginning of the code now decides to jump and wait back to the bottom instead of staying on the top. So, as you can see, this will make it a lot harder to follow the control flow because it will make it significantly harder for the reverse engineer to see how the code was originally a rand yet when it was compiled. In a similar way, if we use the instruction randomizing transformations, you will see a similar issue and what you can see here is that the expressions that we originally had have a completely different ordering in the code that we have obfuscated. If we run different iterations with different obfuscation keys, as you can see here, then the code will always look fairly different from the prior compilation which is basically our objective here. So, if we, for example, use this one where you can see that I run a different obfuscation key, you can see that a lot of the loads and a lot of the arithmetic expressions that go below have been ordered in a completely different way. It's the code that is marked in yellow and in green on the left and in yellow and in blue on the right. So, the objective of this specific transformation is making it significantly harder for an attacker or whoever is trying to analyze our code to see what the original control flow of our program was. And here you can see a third example to see that it actually makes really big differences anyways when you change the key. So, if we go to the swap ops transformation which is also really interesting, you will also see a similar behavior here. So, this code has a significantly smaller number of operations where I can actually do the swapping. But here, so here you can see that in comparison with the original code we are swapping some of the of the operands that we are using on some of the ads and the multiplications because they don't need to stay in that order as both of the operations are commutative. Another operation that is also commutative is the XOR. And yeah, I know I have 15 minutes left. So, we can also see that the result is very different if we change the keys that we use for the buscation or better said, the way in which the random number generated is going to work. So, here you can see that we get a different swap by changing one of the bits of the key. And here you can see that we have another different one when we change some other parts of the key. So, the idea is that every time you change some parts of the key you will get different codes generated at the end which will make it a lot harder for an attacker to figure out what has been changed. Then we finally have the demonstrations for the random function and globals and well, these are pretty trivial. So, this is the original code and the first case code. So, here basically you can see that we have a lot of globals at the beginning of the function. In the left they are ordered alphabetically because that is the order that they had on the original code. On the right as you can see they are ordered pretty much randomly. And the same thing happens with the functions that go below. They get a completely different order in every time when this transformation is executed. And we can actually see that the ordering changes every time that we compile using a different obfuscation key. So, here you can see a completely different version of this same code. And finally I can show you even a third one. So, you can see that the code changes positions a lot every time you use this transformation. So, well, this is the first part of the demo. I will show you a full demo using all of the transformations a bit later. And let's see if I can get my... Yes, perfect. So, let's talk a little bit about why I did this thing. Usually when you have a vulnerability that you want to patch attackers need to figure out what has been changed in order to try to exploit that vulnerability. Supposing that it's not already known. And that basically means that if you, for example, sit down on Wednesday patch day for Microsoft and check the little pieces of code that are changed, you might be able to find a buffer overflow and you start as the basis of a new exploit. So, the main problem we have here is that compilers usually generate the same code for the same inputs. Okay, please, now it's when you can laugh because you know that it's not actually true and that is the reason why, for example, Debian is putting a lot of effort into getting a compiler that will always return the same code so that you can actually verify that the compiler works the way you intended it to. But most of the time they actually do generate code that is the same or pretty similar because the amount of changes that is introduced that is too small and that means that the changes will at most affect the function on which they were introduced and not the word code itself. So, what we can use is that in order to be able to really generate always the same transformation, we can use a cryptographic random number generator that you see that always with the same value. As long as the value is the same, this will work. Of course, in order for this to work correctly, you need to make sure that the cryptographic random number generator has a different seat every time that you use it. In my case, I usually use a different seat for every module and for every function that we are going to obfuscate. The seat is basically decided based on the number on the name of the function, the name of the module and a specific obfuscation key that is passed on compilation time either as an extra transformation pass or as an attribute of the function. The second problem we have is that, well, you can still reorder a code to find what was changed. So, that is why we actually implemented the obfuscation techniques here, while we used control flattening and constant obfuscation so that even if you reorder the code, it will still take you a longer time to figure out what exactly was changed. And finally, the problem we have is that, sorry. I think I can fix it. Yes, let's see, okay. Well, on retrospective, if I told you about how the rest of the week has been, this is the best day ever. Anyways, patches should be small and we cannot change the whole program every time that we do a compilation. So, that is why we use specific keys in order to do the obfuscation. Thank you. So, basically the idea is that we will only obfuscate specific functions or modules that we tell the compiler to obfuscate and they will be obfuscated in exactly the same way every time we do so, as long as we use the same set of obfuscation transformations and the same obfuscation code. So, the idea is that if we have to patch a code that we have already patched, then you will get the same code all of the time. So, that's basically, well, the voting part of the talk. Now I'm going to go for the real demo. I am going to try to show you how hard to follow can be a simple Hello World example. And I guess that for that it's better if I move my console here. So, we cannot see it or even better if I put the screen unified. Yeah. So, now basically you can see the same thing I'm seeing. So, that will make it a lot easier to follow. So, let's make the code a little bit bigger so that you guys can follow what I am doing. And yes, I am one of these evil, evil people that actually names his folders in Spanish in case you're wondering. Be happy that I don't speak Oskera. So, here we have the demo. And the code that we are going to obfuscate here is this simple Hello World program. So, as you can see, it basically has a small array of 1,024 bytes. And it's basically leaving her name and it will use a Hello name. And if the name is 0, then it will use a world.  So, yep. If we go and compile this code, which we are going to do here, the first step basically will generate an LLBM in terms of representation version of the code because I want to show you that despite the code is always the same as it is generated by the compiler, the results will be different when we change the obfuscation keys. And what the second line is doing is that it's actually compiling that intermediate representation. So, as you can see, if we execute the resulting program, this works as it should. So, now we are going to go for the fun part and start doing the obfuscation passes. This first line of code is basically trying to do all of the transformations in an order that I found worked really well. So, first we add a key to the world compilation unit, which is going to be the example key. This key is used in order to see the cryptographic server-random number generator. Then we are going to propagate this key at all. We are going to split the basic blocks. Then we are going to flatten the control flow graph. We are going to cascade the constants. And we are going to reoffuscate the constants one out of every five times. And we choose such a small value in order to prevent exponential growth of our code. Then we have random instructions. We are going to apply a randomizing transformations. And finally, we are going to compile a lot of it into a program that will work. So, and as you can see, things aren't working as I expected. I'm interested in why it's not working here because I didn't generate assembly code. Yes, thank you, third one. Go very close. Okay, so, see, this is what happens when you prepare demos really late in the afternoon or in the night, as I said. This is the original code, and now it should work as it should. So, no. Well, fortunately, I already have the compiler code here. So, you can actually see what is going on. So, this is the obfuscated version of the code. And as you can see, it works exactly the same. And we have different versions of it. If we obfuscate with the same code, with the same obfuscation key, thank you, we are going to go to the, we are going to get exactly the same values. So, for example, if we go to the off and off new, which used the same obfuscation keys, as you can see, the subvalues are exactly the same, which means that the code that was generated is the same. But, on the other hand, if we use a new obfuscation key, the code is widely, widely different. So, just by checking the resulting assembly, which obviously doesn't work if you use the nonminari files. Yeah. You can see that we have quite a few differences between the original control flow program and the resulting one, especially when we go to the main function. Basically, none of the code looks at all like what the one we had before, and the new code is significantly longer and a lot harder to follow. And similarly, as you can see, when we changed the obfuscation key, now the code is on the left, we have a lot of changes also going on into the resulting function. So, this is basically the result of using this compiler. And since I still have four minutes left, I think it's better if we go for the question rounds because I am not fully sure I will be able to fix this on time. Okay. Thank you very much. And a warm applause. So, yeah, we have another three minutes for questions now. We have two microphone angles in the middle of our hall. So, if you have a question, please move to them. And so, you go to the microphone and then you can ask questions. Please, questions and not so many comments if possible. Okay. Thank you for your session. I got one question. What's the overload, size and runtime overload after obfuscation? Thank you. So, the overload in size depends a lot on the specific values that you use when you are applying the transformations. If you, for example, use the slow values for the BBS split and all constant obfuscation adjustments inside of the code, the overload will be reasonably small. Maybe you will get a two-fold size increase in the code. When it comes to performance, at least in my tests, I could not notice a significant difference at all. Most likely because the amount of code that was added was also very highly non-interdependent with the rest of the code and that resulted in the processor being able to optimize most of this code. In fact, a really important thing to take into account here is that optimization passes can totally destroy obfuscation, which is the reason why we were performing first optimization and then the obfuscation steps. Thank you for the question and for coming, actually. Are there any more questions?  I will not bite anybody's task.  It doesn't seem so. So, thank you very much, Klondike. Oh, wait, I think we have one over there. Is there someone coming? Yes. Sorry, I don't know if I hear the answer for this one, but is this project open source? Do you have a link? Because they didn't find in the talk description or anything that they could just take a look. Yes. No, actually, I am a really able person and I decided to make this project completely closed at source as it's usually done in academia, and you can absolutely not get this code. And this is absolutely not a sarcastic remark. Thanks for reminding me because I actually took half a slide that contains all of the links that you guys might be interested in. This code is indeed open source, and I really would love to see you guys using it, asking me any questions you have, because I could not have actually come here if it wasn't because of that. So, as you can see, here you have the... This is the link to my master's thesis, and here is the link of the code that I used for this demo. I will probably release a slightly outdated version because I have taken some of the time at night whilst you guys were getting drunk and partying in order to get a proper working version for trying to do these demos that you have seen today as I had lost the original one. So now the code at least works with LLBM 3.4.2, which is old, I know, but, well, it's at least one stable version that you can work on. And that is easier to get than the bleeding H version of LLBM that I originally used when I was doing this work. So, hopefully that answers your question. Yeah, yeah, yeah. Perfect. Thank you. Yeah, thank you. Thanks, thanks, actually, for asking. I had absolutely forgotten to put those links. Okay, thank you, Klondike, and a warm applause for you and your work. Can I just say one thing? Yeah, you can say one thing. Thanks a lot to all of you that have come, and especially to the people at Bornhack, because I gave a significantly worser version of this talk there that is what made me... Allowed me to have a much better version here. So, thanks a lot, especially to you and the really nice video girl that was helping me a lot. And to the poor translator over there that is trying to translate some of my jokes, I'm a really thick Spanish accent. So, thanks a lot to all of you. So, thank you. And yeah, a warm applause for our translators. It's always very good.


So this is our final session of the day for Big Talk from Small Libraries 2019. This right now is Betsy Evans, who is from the Sul Ross State University in Alpine, Texas. FTA about 2,400. Just about, yeah, on a good day. Yeah, on a good day. And she's going to talk about graphics workflow and doing some branding and things for your library in all different ways, with some really cool software and things that I can use, knowing, looking at her print leather show notes here, our description. So I'm just going to hand it over to you to tell us how we can do some great marketing for our libraries. All right, well, I do have to admit that now that I've been working on this presentation, that it's going to be a show that this is a big work in progress. But I'll just get started and we'll kind of work through it together. So like Krista said, my name's Betsy Evans, and I'm the education and outreach librarian at the smallest public university in Texas. And for those non Texans in the room, you know that Texas is a very large state. We, I don't know, Texans have a thing about us. We like really think that everybody knows a lot about Texas. So my apologies in advance. But I'll share more details about Sulras in our small town. But I'll first tell you that what I'm presenting today is an ongoing case study that revolves around something that all of us are familiar with as library people. And that's doing more with less. So it's inevitable for librarians to need and to want to do more with less because our budgets are always decreasing and there never seems to be enough people power to accomplish all of our big amazing bright ideas. And it's kind of sad that that's become a cliche in the library world, but that's the way it is. So I've been in my position at Sulras for about two years. And our universities had some issues with enrollment. I said 2400 on a good day and that's definitely accurate. Last fiscal year we had to cut $2 million from our budget so we are definitely in the time of pulling out all the stops to increase enrollment because a more enrolled and engaged student population means a half year and healthier university. So part of this initiative is rebranding. But as a university we don't have an official public relations officer or even a very well-established creative services team. So it's been a rough few years. But luckily, and you can see in the slide, I live in a really beautiful place near Big Ben National Park and I really love my library colleagues and I love our mission. Our university serves many first generation college students. And our goal is just to instill lifelong learning in the students and in our faculty and staff and in the greater Alpine community. So we as a library and those other academic librarians out there probably agree. I think libraries tend to be the heart of a good thriving university. So instead of letting myself get totally burnt out with all this negativity, I looked inwardly and thought about how I could increase efficiency in my own workload and refine my process and my work day so that I could focus on the big part of my job as education and outreach librarian which is the information literacy aspect. And one way I realized I could do that was to cut down on the time that I spent creating promotions for our services and resources. Oh, pardon me. So in an attempt to do that, I was just trying to streamline and schedule content creation. Yeah, so I didn't skip ahead too soon. So the goals for today then are I'm going to share how I defined really the big problems that I'm having in my own workflow and set about fixing those problems. I found tools that I've shared that I'll share along the way and definitely I will show you my graphic creation and digital asset management in Canva and in SharePoint, which I do understand that SharePoint's not something that everybody has access to but there are other digital asset management type of like cloud storage that's available for free and most institutions have something like that. I've continued to find areas where I need to figure out solutions. So I'm just going to say it a bunch of times. This is definitely a work in progress. But you know, most importantly is that I've really adjusted my attitude, especially looking inward during this time of trying to improve my workflow and remembering that working in any organization is just thinking about things and sometimes thinking big is about really just thinking small and refining and just moving forward. So if there's one thing that you take away from today from me talking it's that you know we all have really good work to do as librarians and looking towards other librarians is so helpful and that's why I really value opportunities like this and I've used a lot of past talks from this specific conference to Jettison ideas forward in this library. So even today during the lightning round I learned a few more tips from Courtney Hicks and Jennifer Shimada for marketing and working smarter and those things are going to apply how I move forward with this workflow. I'm going to share my process with you in a traditional case study format. I'll define some of the problems, provide more background and context and then I'll transition into the ways that I'm trying to solve those problems and provide some recommendations and then of course we'll look to the future. Okay, so the biggest concern that I have is how much time I've been generating and regenerating promotional content for our library. That's for our website, on social media, for print promotion and physical displays and for a new LCD screen that we just acquired. These things are definitely separate and in other libraries different staff might be assigned different tasks related to organizing and public relations but in this library it's mostly me. So an important question to ask also at this juncture is why bother with all of this extra work? We've been able to show on our campus that these promotions and this time that we spend on social media and the time that we spent redesigning our website have made a big impact in our usage stats and are in the door stats. So we've seen the door count increase exponentially in the past two fiscal years and we've just watched the library grow as a place that people really want to be on campus. So in order to honor our mission and continue to grow those services we think that having that consistent voice is really important. What I'm looking for seems simple. I'm looking for template-based signage so that anyone in the library who wants to make a sign can make a sign that follows our branding guidelines. I want an easy approval process for those templates and graphics so that our dean knows what's going on. I want content that transfers and translates easily between formats and platforms. Those include displays, print promotion and online graphics, in other words a consistent brand. I want a timeline so that we have things planned out and we don't have to drop everything to get something done at a moment's notice even when it's a really good idea. And I would like to reduce waste and save resources by printing less, using free software and making the most of social media. And that all sounds really easy but here's what I still need to do to get there. Obviously more foundational effort, more time to build more templates, just getting all of that stuff ready so that I can present it to the rest of the crew here. And I need buy-in so I need to be able to promise them that it's worth their time and people have emotional connections sometimes to their design processes. So I have to overcome those feelings and make sure that people feel confident and understand the point of moving toward a more consistent and cohesive voice. Then buy-in for an approval process. I'm thinking that I need a little bit more of a concrete approval process maybe outside my own building so getting more stakeholders and administration with the various different people who work together to plan and promote events on campus. And then of course I just need more assessment so a better understanding of how my audience of students mainly but also staff and faculty and community how these people interact with promotions of services and resources and you know just like the question of is it worthwhile to create all these printed paper advertisements. That's the way it's always been done but these are the times when we need to push forward and ask those questions. Okay so let me share a little bit more about Solras. The Bryan Wilden Fall Memorial Library is here at Solras State University based in Alpine. It's a town in Far West Texas. I should have put a nice map on this slide with a population of about 7,000. If you can visualize Texas, El Paso is over on the western point and we are three hours east of El Paso. Then if you think about Austin which is kind of in the middle of Texas we're six hours west of Austin so we're really kind of in the middle of nowhere in Texas. If you've heard of Big Bend National Park we're two hours north of that and we're 30 miles down the road from the internationally known arts community of Marfa which people tend to know more than Alpine. So we at Solras are designated as a Hispanic serving institution meaning more than 25% of our total undergraduate full-time equivalent enrollment is made up of Hispanic students. We serve a population of about 2,400 students and many of these are first generation. That means that something we find is that library staff spends a lot of time with our students making sure they are generating skills that they need for those early composition classes and other coursework and generally providing an additional outlet for student and moral support on campus. I think for me it's just been an adjustment coming from the public library world to this education heavy job where there's a lot more hands-on and a lot more one-on-one support with students, which is great. I never thought I'd like doing it so much actually. So Will and Fall Library is the only university library on this campus and on the other three campuses that we serve. So we've got a staff of 11 serving under our dean and with the dean included there are four reference librarians each with drastically different roles outside of reference service. So administrative and leadership, technical services discovery services and then education and outreach. So a few big areas of current interest that pertain to our library and make sense to bring up here are that we are the Seoul Library but there are three other campuses located in Del Rio, Uvalde and Eagle Pass with students who are also entitled to use our resources. In that great description of the physical geography of Texas, it's important to note that Del Rio, Uvalde and Eagle Pass are at minimum three hours driving distance from Alpine. So those students are not driving to use our library physically but using our library mostly online and connecting using Blackboard Collaborate and a lot of those virtual services. So these students have access to resources at a junior college but that reciprocal agreement is not very formalized. So we serve these students at Seoul Del Rio, Uvalde and Eagle Pass but outreach is definitely lacking to those students. This will eventually mean that our brand and our voice as a library and as a university needs to grow to be strong enough to support itself in these other locations so that the services that we provide mean the same thing in the four different geographic locations. The other thing is that we also house the archives of the Big Bend which is its own entity in a way but not on any kind of budget. So it's really important and truly the gem of our institution in my opinion but they lack the time and resources to really be the best that they can be. So that's just another thing that we're thinking about especially as funding becomes more and more precarious. And then of course for me specifically the drastically different role that I play as a librarian is the education piece. So Sorry about that. I meant to, it's 4.15. That's going to happen potentially two more times while I'm talking so I will try to keep an eye on the clock and maybe mute it next time. That's okay as long as you don't get kicked out before you're done. I will not. I warned them that I would stay after they turned off the lights. Okay. So kind of in the why bother category I think that and in the other duties as a sign category I ended up even though my role is education and I spend a lot of time in the classroom and a lot of time working with faculty to develop ways to incorporate information literacy into assignments. The kind of obstinate of the spectrum is all this PR and outreach and events planning and programming that I'm doing. And I think that this is such an important aspect of my job especially in terms of getting the faculty to answer my emails and to do the things that I want them to do with information literacy is just growing the popularity of the library and making the library a place where people want to be and where people feel comfortable. So sometimes we just do these things because nobody else is doing them obviously and oddly enough my dean is a librarian who's, she's really interested in design and graphics and she wishes that she could be doing all of this stuff but she's so bogged down with administrative stuff but she started a design blog called library and design chair and I'll share a link to it as well when I share these slides because it's been a really great source for me as I've once I found out that she was in charge of it too. She doesn't run it anymore but it made me really want to share that any kind of graphics or promotion that I was doing was really up to her level but I started doing all of this stuff when I first got to this library because I took over the social media accounts and I started by just kind of building cohesion between our different platforms so we're on Facebook and Instagram and a little bit on Twitter but it's not really a Twitter community out here how I could grow the popularity of that like the followership and the engagement online and then kind of leverage those numbers to show that okay if we can do this online and increase clicks into resources and clicks into services you know on our website then it could potentially work in the library too if we were kind of having a cohesive voice and a brand okay so obviously in terms of also context and background we have to do research because we're librarians so some of the things that have been really helpful for me are learning more about workflow mapping I joke that I'm like definitely a public services librarian because I'm not nearly as detail oriented as any of my tech services counter points so I'd have to work really hard at doing things like workflow and creating charts and using Excel and all that stuff and that's just a personal problem but other things that have been really important are the Solruss branding guide of course because that helps us to decide what the library's specific branding guide will look like this article in College and Research Library's we used it last excuse me we used it last semester with our acquisitions library and retired after 26 years and we used this five step process to go through several of her processes to modernize them and it really worked well so I'm using it again in this process and I definitely think if there's anything that you're looking to increase efficiency with definitely check out this article by Orna and Warfield and then of course this marketing for special and academic libraries it's a really good source book but the scope is a little bit bigger than what I'm looking for right now but I have used it quite a bit and it's just part of our collection so the actual building a workflow part is kind of a big chunk of what I've been doing and like I said with that source book it's really easy to get bogged down in the moving parts of library marketing and promotion and then even how that fits into a broader organization if you're part of a broader organization like I am so with different aspects of promotion requiring slightly different workflows I'm finding that I still have a lot to do before I get everything ironed out considering planned displays, planned events and planned resource promotion or service launches you can kind of start to see the workflow coming together but of course the keyword is planned and so much of the work that I do and probably all of you do is not planned so it really points to the original problem but building a more solid workflow for the things that I can control should free up time for the things that inevitably come up last minute and so here's where I am with that workflow. First of all planning backwards in advance. This semester I mapped out displays month by month using an Excel spreadsheet actually in my OneDrive on SharePoint so I picked some themes and input titles and call numbers of books that would be transferred from the general collection to displays and then I brainstormed how to connect those resources and services to those displays. It saved me so much time it's only February but it's already really been a high return on my investment of just a few hours on a Sunday reference desk shift. So this I also felt is funny because it's kind of an old school way of doing things as planning out a physical book display but it's helped me shape the whole academic calendar year in terms of what I want to promote and when and there's also how but we'll talk about that later but just connecting actually the physical books to all these virtual resources and programming that's coinciding as we move along throughout the year. So in terms of planning backwards it's important for me to know how much padded time I need to add to promoting an event, a display, a resource, or a service because of the other workflows that exist on campus. So in my case if I want to have posters hung all over campus I have to get them printed which means I need at least 24 hour lead time to get something to the print shop and I have to have them ready and distributed to my student workers and the residential living office within two weeks of the planned promotion period to give everyone the time that they need to do what they need to do and I also have to have my posters stamped by our campus activities office once they're printed but before they can be distributed so I have to add in time to walk posters over to that office before final distribution. So that sounded like a lot of work right so knowing your audience is something that I've been working on and I've come to question a lot of times that's a lot of work just to get stuff hung up on a wall so who's even reading these signs. But through anecdotal evidence through talking to the assistant director of residential living I've learned that yeah people are talking about these things that they read on the community boards over in the residence halls and there are 1100 students who live in those halls so advertising in the residence halls is worth the extra effort because it seems to really work. But maybe advertising on the event boards that are located like all throughout campus might not be worth my effort unless I'm really doing a big push for some kind of big annual event like the open house that we had on Valentine's Day where we did just the whole campus and we had a nice turnout. So that's kind of leads into knowing your cogs and that's an affectionate term for the people who make the workflow work for the library. So collaborating with people like the assistant director over in ResLife or the manager of the print shop who the more that I talk to her and she's convinced me to save paper by creating bookmark advertisements and printing on 8.5 by 11 flyers rather than tabloid size which is 11 by 17 because the argument is that it's still a flyer even if it's only on a regular 8.5 by 11 sheet. So connecting with these different cogs has definitely increased my efficiency and there's just the human aspect of it. So appealing to the kindness of these people and really listening to what they have to say and trying not to reinvent the wheel while still trying to build a more efficient workflow. Of course I'm going to show you on Canva in a little bit what I'm doing so you can get an idea of what we're trying to achieve but the main simplification I'm working on right now is just to work with standards. So I'm talking about templates but also about shapes. I really like squares because they look nice on our social media and they don't look too bad on our LCD screen. You just center the square right in the middle of that big rectangle and I am trying to kind of figure out how I feel about putting squares on promotional flyers but I'm working on that and probably just would really increase my efficiency if I could just give into the square all the time. I think it's important to start with this seems so sometimes more obvious to some people than others but one thing that I do is that I build a lot of graphics in like PowerPoint or Canva I used to work in Microsoft Paint a lot so you don't have to have fancy tools. Microsoft Paint has a lot of pretty good capability as long as you're starting with the graphic the biggest graphic first so the thing that you need to be the biggest like your flyer that needs to be printed it needs to be the highest resolution and then you can kind of cut pieces out of it and work down from there but I can't turn an Instagram post into a flyer because everything's just going to be distorted and not ready so that's just a simple tool always start with the biggest one. Okay also saving to the cloud so like I said we're going to look at Canva and SharePoint because I'm trying really hard to better organize my digital assets so that the programs I'm doing every year I can keep coming back to them and not having to rebrand programs over and over again every year every semester. The cloud service has been really helpful for me because I move around the library building a lot I forget my thumb drives so I can access what I'm working on from anywhere and even on my phone so your organization doesn't have to pay for an expensive service like SharePoint you can use things like Google Docs or even Canva's free storage for me has been enough so far I haven't had to upgrade because of that. So of course the last part of building a workflow is following that workflow it's never an A to B or linear process so we follow the workflow so that we can maintain it and continue to refine it Okay so before I go over to Canva more about graphics would be just like the keep it simple approach is definitely where it's at and why I intend to transition all of my graphics to templates moving forward and if you've never heard of Canva it's a cloud based software with drag and drop functionality that allows you to make some really nice signage and graphics and they offer paid accounts but so far we don't have one I actually just have a free individual account and then some of the other staff have individual accounts for the other things that they do with Canva but an institutional account is only $12 a month so it wouldn't be crazy and I would think that if you were working with a team it might really be worth the money so the greatest part about Canva is that they allow you to upload your own images so that the most out of it I've uploaded our logo and brand mark sets to the website and I also use the hex codes to find the exact colors that I want so you can change there it is we're pausing for the announcement to finish yes sorry about that yeah so I love that you can custom it you can like take something that's existing and change all the colors so that it just fits with exactly what you're looking for and I'll show that to you in just a second our school colors are red and gray so luckily our university branding guide that came out last December they chose some complimentary colors so not everything that I do has to be red and gray because it's just really intense but I am one of the most universal adopters of these secondary colors so I try to do everything on the up and up following what the university is asking us to do so one of my favorite things when we get in there so bringing over Canva to show you guys if you haven't used it before when you I'm logged in already but it will give you the opportunity to create a design and it gives you lots of different size options which I think is great but it also will let you create custom designs so recently I made some lights for the whole university I made these like sliding lines that go in some plastic holders the university already owned so I was able to build custom dimensions so that the sign would print perfectly and it's amazing that a librarian can do that and we don't have to outsource it to somebody else but for the library so here's an example of a square and I think my favorite tool is that you can come up with something that you've made previously and you can clone it so you can clone something and just make a new thing and somewhere around here I have all other 9 tips from EBSCO for interpreting media but yes so I really just wanted to show you how it's evolving and how I think I'm getting a little bit more uniform with trying to follow this workflow that I'm setting out for myself and what I think that we're really just going to move toward is utilizing our collection of flicker photos which is a new thing for us so we recently got a new director of publications and news and he has a fabulous photo for us so I only take photos of my iPhone but he luckily just is everywhere on campus taking photos all the time and uploading them for us so I have this great library of photos that are available to use for these promotions and what I really like about them is that students get excited because they can see themselves on these posters when they're out and about and I've actually heard good feedback of students being, I was worried at first that they weren't going to like it but they do like it and they feel like okay I'm part of this community now and there I am, look I'm on a poster so it's going really well and then I guess I can show you also with all these different logos that you have more organized and then the other thing is okay so over on SharePoint I hesitated to show you guys SharePoint because it's so personal for my organization but at least you can see my file naming system so in outreach and promotion events you can just see it's helpful more the more organized that I am the better and one of my time management things that I've been doing is just setting aside time I'm not, I took a class on this in library school, you're supposed to just get in the habit of putting things in the right folder at the right time but I'm a big save to desktop kind of gal but what I can promise myself to do is put those things in the correct folders at a special time so on Monday mornings I usually look forward to the clearing off my desktop time of the day when I put everything where it's supposed to go and I tell my students it's just about what finding what works for you in terms of research management and organizing okay what else was I going to show you over here alright I think that's it I'll show you okay so that was kind of the back end of or behind the scenes of what I'm doing but what I'm doing is just trying to compile and internally publicize our local style guide and that's based off the university branding guidelines I've also got a philosophy that I'm not changing based off this workflow and I thought that it might be interesting to share that like I have this philosophy about social media that I think even though there are a lot of great tools to manage social media now that I still want it to be organic and I call it my social media plus mental health philosophy and that is what keeps me doing it and keeps me coming back to it so I use posting to social media as an opportunity to get up and leave my office and walk around the library and see what's happening and see what people are doing and sometimes I take photos and save them for later sometimes I post right in the moment but I don't think I'm going to change that part of my workflow because it really does just kind of helps me to engage with the people who are in the library at any given time when I need to go up and get up and get out of my office. The other thing of course is talking about time management with all of this and I thought it was funny in the blurb for this talk that I mentioned creative time as if we all have like a daily appointment in our outlet calendar so it's like creative time which we don't most of us some of us might be lucky but I tend to save a lot of this kind of work for when I'm at the reference desk so much of the other work that I do working with faculty and writing proposals for like grant funding and all this stuff that requires a lot of thinking I like to do that in my office but I can do social media and I can play on Canva when I don't mind being interrupted so at the reference desk is really when I get a lot of my outreach and programming stuff done we've talked a lot about what I'm doing but our concerns for the future are of course to stick to these habits not to drop everything at once I'm really trying to stick to the schedule so even if I notice something on the LCD screen as out of date when I go to the restroom because I have to pass by it when I go to the restroom I'm not going to stop what I'm doing and fix it then but I'm just going to wait until that scheduled block of time when I'm on the reference desk and fix it on the reference desk and that is hopefully going to train me to be a lot more proactive about it also we just know that our university branding is going to continue to evolve so the new R example seems to be silly on my slide but recently all of our logos for the entire university were tweaked slightly but just enough to where we're going to have to change everything again from what we changed last December so there's a lot of stuff going on in our administration that's kind of trickling down to us there's a fear about what we're doing in the library and how we can make sure that we are doing our best to be part of the university branding but also we're so afraid of just doing the same work over and over again so that's an issue that's kind of coming up and then growing those graphics into our bigger service footprint outside of Alpine is going to be an issue as we move forward and continuing to just assess this workflow as we move forward so to recap today I presented our ongoing case study it seems to have led to so many more questions and answers I've talked about some of the progress that I've made and I showed you Canva and kind of where I am and graphic creation and then talked about what's going to happen in the future and how we just don't know what it feels like when I put this presentation together that I just started whining but know that it was really therapeutic for me and it's great that I still have a lot of work to do so thank you all for coming on this journey with me and thanks to the Big Talk from Small Library's conference and thank you Krista for organizing everything especially when you're just getting over an illness Oh yeah any questions I made it almost to the end of the day great thank you so much Betsy you know that was awesome I was very much appreciative of all your organization tips and everything about how to do because there are so many things and this is what's great about your presentation too that it's not just for the academics everything you're doing applies to any kind of library that's going to need to organize all these different places that you're doing things and how you're trying to market things and how you're trying to brand and like you said they just slightly tweaked our logo and now we got to redo everything I didn't think you were whining at all it's very understandable everything you're doing we did have a couple of some questions that came in if anybody does have any questions type them into the questions section of your go to webinar interface and we'll get Betsy to answer them for you so everyone has a question here and I think you made a mention of this but I think I want a little more explanation do you print these posters yourself or do you take them somewhere to print them for you or do you do some a little of both well luckily for us we just got these nice new 0x printers so my color printing has gone from zero capability to pretty high quality here in the library just in the past few weeks we do have a print shop on campus so for those anything that I want on bigger cardstock or bigger format I have the capability of using our print shop oversized posters or banners or things yes I would have to do for you yeah okay for a small community as Alpine is do you advertise beyond the campus and the community for some of your events we do it's actually our Facebook page is mostly community members and faculty so we get a lot of engagement with community through Facebook but we do the local newspaper picks up many many of the things that are going on on the university campus but especially in the library so none of the students using Facebook then no the Instagram is definitely more popular with our students Snapchat is really really popular but I just can't get into Snapchat myself I don't know that it's very much something for marketing it may be one of those places you just don't it yes I'm looking for a student to be my ambassador into Snapchat but I haven't found the right student yet absolutely there was a site you mentioned so once no of you share the link to the Librarians design share site that you mentioned yes definitely and it's very Googleable too but when I give my slides to you I'll make sure I have all of those additional resources oh great okay great so you have all the links that might be linkable you'll have it there great let's see what do we have here I'm just reading this one question here see okay this is when you're working with a team this is yeah how do you emphasize the need for using the templates for sticking to the brand when other team members want to be quote more creative this person is needed to convince team members that they need to stick to the program of what we're doing even though they might have some of their own ideas it's a really sensitive process I previously worked for the Austin Public Library oh there it is again sorry well I hope they won't turn off Betsy's computer as she said she'd let them know she's there they promised they wouldn't so what I was saying is I worked at the Austin Public Library in Texas and during their big rebranding so in their office of programs and partnerships and there was just the most amazing amount of pushback because if people were just worried they were losing their opportunities to be creative in the workplace I think here I've had a lot more success and the best way that I can say like the easiest way is just that you're saying like you don't have to do this I'm making it so easy for you so that it's just one less thing for you to do you're definitely going to come up against people who are creative and want to do what they think is creative and luckily in Austin I had a co-worker who was willing to lay the hammer down and it might be that I have to be the person who lays the hammer down eventually but so far so good here it's a hard thing to give advice on because it really is just going to depend on your relationship with that person who really wants to be creative and sometimes you've got to take that tough love approach. And then where is it being dictated from the brand or the template as well for example is it your university or your city if you're a public library says everything that you put out that relates to you has to have this logo or this header on a web page or something because you are representing us the bigger picture but then beyond that you can get more creative with your specific information potentially but you still need to work within the guidelines and so it may depend if there's some past the buck kind of thing where you can say that like we as a state agency have to have certain things at the top and bottom of our pages no questions asked because we're a state agency in between those two things you can do whatever you need to do what you're doing for your agency but it didn't come from us it came from above yes and that's it it's great to be able to blame policies sometimes we as librarians know that and I think also finding that space to let people creativity in the middle of those two guidelines is really important too because you know we want people to like their jobs sure oh yeah and have fun doing these creative things yeah I think also pushing the fact that this is for the brand of the library is something we've all could be if they're all involved together in creating this picture of what the library is going to how the library is going to present themselves so giving them the power to be part of the process too might be helpful definitely part of something bigger help do it you know maybe if they care if you can ask them well together let's create something and then we all have to make sure we follow it yeah it is a difficult situation alright any other questions for Betsy here before we wrap up type into the questions section there I will say for myself personally I have used Canva before as well and I also highly recommend it it's such a slick as you said you can be a I'm sure people who go to school for this and schools that teach this don't like me to say it but you can be a graphic designer without having the training oh it's surprising how nice it is some of the things I've seen some libraries and some colleagues of mine come out with and I just assumed it must have been their PR person or their their communications department that you know an expert graphic designer they hired and they're like no I just use the software and I click and drop things and it's got a lot of that built in knowledge in there for you so yeah and free as you said alright well it doesn't look like anybody has typed any last minute desperate questions for you but um you can contact Betsy at her library if you do have any sorry so many years out of a little coughing no worries so I think that will wrap it up for the day thank you so much Betsy for finishing things up for us here thank you Chris but wait one last thing a name of the site that you said your director manages about graphics oh that's library and design share that's the one that the previous person mentioned and it will be included in the slides when they get sent to us yes alright so that will wrap it up for this year's big talk from small libraries


The Los Angeles Chargers have plenty of fantasy relevant options on their football team. And so in this edition of the hurry up, I'm going to go over my top three fantasy options heading into the 2022 season for the Los Angeles Chargers. The first player I want to talk about is Austin Eckler, and he finishes the number two running back last year in both PPR and standard formats. There were a little bit of concerns. They drafted Isaiah Spiller in the draft, but then also, you know, there's been talk about reducing his workload. And we know he's probably not going to score 20 touchdowns again as he did last season. So are there some concerns? Yes, but he did finish, like I said, as the number two running back and was consistent all year. He played through injury, played 16 games total, had a ton of receptions, which we're going to see in this offense. And this offense needs him in order to be effective. So do I see a huge reduction in his workload or maybe a huge reduction in touchdowns or even performance? Absolutely not. When it comes to Austin Eckler, he loves fantasy himself. So I think he's going to be still the same dynamic player he has been. I wouldn't, I don't know if he's going to finish at the top two or three, but I would still put him in that mid-tier running back one conversation when it comes to fantasy football. And then Kenan Allen. Kenan Allen's been a staple of the fantasy community for years, it seems like now. Because of his high floor, we know what Kenan Allen provides. Last year he had over 100 catches, over 1100 yards and six touchdowns, which seems to be the staple of his career. Three of the last four seasons, he's hit that number. So I'd expect that continue in this offense. I don't really see any reason for that to change. There's a lot of people that have Mike Williams taking over the number one roller, really elevating his level of play. He finishes the number 12 wide receiver in fantasy last year, but I still think this is Kenan Allen's team when it comes to the receiving core and he's still going to be the alpha. Does he carry the same upside as some of the other guys being drafted after him? Absolutely not. He's going to be in the six to eight touchdown range, probably in the 100 to 120 catch range. And somewhere in that 1100 to 1200 yard range. This is who Kenan Allen is at this stage in his career, but he has one of the highest floors when it comes to receivers and is consistent on a week to week basis, which can help your fantasy team. So just know that coming in. He's still a top 12 option when it comes to wide receiver. The last thing I want to talk about is Justin Herbert, who we saw continue his trend and ascension into fantasy elite QBs. He was the number two quarterback last season for good reason, threw for over 35 touchdowns, got over 5000 yards, which you love to see as a quarterback and then also ran for 300 yards as well last year. So he's got it all. He's the whole package coming into year three in this offense and there's still room, still room for more. Now, there's a little bit of concern with the defense, the defense got a lot better.  He's still going to be in that conversation. I do think he'll be a top five lock for top five production and he's going to continue his trend of playing, you know, at a very elite level. Now that does it for this edition of the hurry up talking about the chargers options left out Mike Williams, who's going to be a top 25 wide receiver locked in and Joe Debert, who's also a sleeper too. So let me know who are your top three options for the chargers. Make sure you guys take advantage of the offer below. We'll see you on the next hurry up.


Let's jump over to our man Teddy Kegs that we talked to Teddy folks every Wednesday at 40 past the hour You can reach Teddy every trading day at his website for X dash trading dash unlock calm Teddy Kegs that what's happening man I mean Tommy good morning So we have a few moves going on in the forex market cat Teddy. We have crude Holding that some pretty lofty levels right now coming off the Memorial Day weekend. We got some OPEC newest potentially Where do you want to kick things off this morning? Well, why don't we talk about the crude and interest rate markets since they're definitely helping to drive What's going on in the currencies right now? We have a little flip in the dollar about to happen So obviously if crude is trending higher higher move highs and higher move lows, especially on the daily and the hourly I think we're gonna continue to batter resistance. I think we're gonna keep on probing those highs I think we're gonna definitely start to You know the momentum is gonna build it's just gonna keep on building I see us at a 120 to 125 in the not too distant future without a doubt So yeah, I got the chart up on a daily. I mean we just got above those recent highs, right? The only thing on that chart really is that initial spike to 130 What we hit yesterday pretty close. We get to 120 198 Yeah, the way the way we came out of the gate through the holiday with oil right now The bowls are in place, you know that part of the that is definitely I think I mean higher move highs and higher move lows What do you look at? What else can you say, you know, and so we have some type of? Divergence at least from that to see some sort of neutral trade setup I don't think that's gonna happen Then we also have the but the Treasury bond market and the 10-year market where they had a very very big sell-off Now the interesting thing is that the dollar has been basically in a downside correction for the past couple of weeks So the euro has been a little bit stronger than it had been but not that much The pound's been holding up but a lot of other currencies have gained a little bit of ground So they're all in a corrective phase. I think we're as this week in the next week We're coming into the end of that so there still could be a dollar spike to the lows But right now I think you're starting to find a bottom as far as with the dollar index Meaning that the euro is running out of gas and that's the one especially it's one of the strongest currencies out there You know, it's the biggest in the dollar index. It's having trouble with resistance, you know Like you can't sustain a rally, you know It had a nice corrective move over the past couple of weeks But the momentum is waning and I think that we're starting to see that dollar strength is gonna come back in a very very big way Especially as we head into a you know the middle of June and into July Yeah, that euro-us dollar man. I had it on a daily. I put it on a weekly I mean just basically a straight drop since February 7th from 1 15 almost a 103 49 so 103 5 Yeah, that's a bounce, but I hear you I mean if I put a trend line on that chart, you know You're barely out of the downtrend that's pretty steep on the euro-us dollar major trends are coinciding right now very well Where you have the dollar index correcting you have the Treasury bond market that's been correcting to the upside You know and and it's as an even with oil So now as we have the Treasury bond market is starting to spike out and run out of gas to the upside It looks like the bears are coming back, you know, that's the same thing that's going on with the dollar Those bowls of the dollar bowls are coming back the interest rate bears are coming back And as though if those two start to come together, you know, you're gonna see bat Definitely the euro is starting to collapse again and the and the US dollar Swiss Frank I think that's one to really watch out for because it came out It went above parity and had a very big correction of especially concerning if you look at most of the currencies the yen and they send And the Swiss have corrected the most Okay, and now I think they're gonna go when they go back to the upside They're going to make new highs. We're gonna see the US dollar Swiss above parity again So that's a pretty good Intermediate term trade. I mean, this is not gonna happen over the next couple of sessions But I guarantee you especially the Swiss It's not gonna just trend and grind higher like I hate, you know A quarter point over a day over the course of weeks when it is gonna start to move And if you're gonna have a couple days where you're gonna probably see like two basis handles without a doubt You know as it starts to get towards parity That is quite a chart man from April 4th 92 cents to just above parity and then back to 96 in a heartbeat That's some volatility man, right? There's a nice right there. You talked about the interest rate pretty remarkable I had the chart of the tenure even up here You're sitting almost back a couple months to where we were as you chopped around a bit I was talking about at the beginning of my program that the feds gonna be rolling off the balance sheet starting in June That the numbers they're using it's pretty interesting I was talking about Kevin Hicks saying that you know, they're gonna be rolling off I think it's 47.5 billion total that's gonna be 30 billion in Treasury securities and 17.5 and mortgage backed But they can't they're there they have maturities expiring Teddy. They're over the 30 billion So they're still gonna be reinvesting like 18 billion dollars this month of Treasury securities Do you see that baked in I asked Kevin a similar question, you know, because it's an important one Right as in we coming down the line here Do you see that baked in or do you see rates potentially raising higher rising higher as we come into a fed hiking and hiking cycle? And we got another meeting in two weeks from today. I think they announce Yeah, actually I do I think like right now if the bonds actually do get a rally It's gonna be one last head fake I think that as we move into June and going into July you're gonna see the bonds trend a lot lower and Remember these expirations that you're talking about also coincide with futures expiration So you're gonna have futures options and cash Deliverables expiring all at the same time. That's gonna cause a lot of crazy volatility And now I would say probably from around June 10th to about June 25th, you know Like that that window of 1415 days I think you're gonna see a lot of erratic moves in the Treasury bond market It's gonna be really hard to gauge direction during that time because you're gonna have an unloading of all these things You know what I mean? So I mean and I know that's a dynamic a lot of people don't understand We don't need to get in the mechanics of it But that time frame of out of those expirations, especially with combined with the cash I think is really gonna be a tough trade. So the trends are intact You know, keep stick to your guns on that but be very careful if you're an intraday trader during that window Yeah, I found it amusing. I saw one article was talking about I think maybe the minutes of the recent Fed meeting and saying that a Couple of the Fed governors were uncertain of how that type of a roll-off would go and I say if if anybody says you're certain Man, you're crazy. How could you be certain you're rolling off something? You know, I mean, of course We should be uncertain anybody that tells you they know how it's gonna go You at least got to be prepared for for some unforeseen situations when you're talking about that type of a roll-off, man well, Teddy, we appreciate the time we appreciate the conversation as always man and We'll talk to you a week from today, man. Now crude. Let's finish it up. So we're sitting out. We got about 30 seconds, Teddy Crude at about 120 you talked about it last week saying, you know playing this market very difficult with the volatility when I ask you Maybe looking at some of the currencies Could you talk about that again for a quick 30 seconds for the listeners? I didn't check it out how you might be able to trade crude. Go ahead. Absolutely that goes with the US dollar yen trade The US dollar Swiss trade for sure as crude oil starts to rally You're gonna see they're good. They're those that's giving strength to those two for sure Be very careful with the US dollar Canada. That's gonna be very choppy as crude starts to rally Awesome, man. And look at the chart of that yen, man. Yeah, quite a bounce in the last few days to 129 28 Inching towards that 130 mark. Well, Teddy, man, we appreciate the time as always the education and we'll talk to you a week from today, man Thanks, Tommy. See you next week. Okay. Thanks